Cod sursa(job #1690747)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 15 aprilie 2016 16:53:30
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
using namespace std;
int g[5002],p[5002],best[10002];
int main()
{
    int n,s,i,j;
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    scanf("%d%d",&n,&s);
    for(i=1; i<=n; i++)
        scanf("%d%d",&g[i],&p[i]);
    int max=0;
    for(i=1; i<=n; i++)
    {
        for(j=max; j>=1; j--)
            if(best[j]!=0&&j+g[i]<=s&&best[j]+p[i]>best[j+g[i]])
            {
                best[j+g[i]]=best[j]+p[i];
                if(j+g[i]>max)max=j+g[i];
            }
        if(g[i]<=s&&best[g[i]]<p[i])
        {
            best[g[i]]=p[i];
            if(g[i]>max)max=g[i];
        }
    }
    max=0;
    for(i=0; i<=s; i++)
        if(best[i]>max)max=best[i];
        printf("%d\n",max);
    return 0;
}