Cod sursa(job #1654954)

Utilizator lauratalaatlaura talaat lauratalaat Data 17 martie 2016 16:59:46
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
struct bine {int g ; int p ;};
bine v[5001];
int suma[10001];
int main(){
    int max,i,j,n,G,maxim;
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    scanf("%d%d",&n,&G);
    for(i=1;i<=n;i++)
        scanf("%d%d",&v[i].g,&v[i].p);
    suma[v[1].g]=v[1].p;
    max=v[1].g;
    for(i=2;i<=n;i++){
        for(j=max;j>=1;j--){
            if(suma[j]!=0&&j+v[i].g<=G){
                if(suma[j+v[i].g]<v[i].p+suma[j])
                    suma[j+v[i].g]=v[i].p+suma[j];
                if(suma[j+v[i].g]==0)
                       suma[j+v[i].g]=v[i].p+suma[j];
                if(j+v[i].g>max)
                    max=j+v[i].g;
            }
        }
        if(suma[v[i].g]<v[i].p||suma[v[i].g]==0){
            suma[v[i].g]=v[i].p;
            if(v[i].g>max)
                max=v[i].g;
        }

    }
    maxim=-1;
    for(i=max;i>=1;i--)
        if(suma[i]>maxim)
            maxim=suma[i];
    printf("%d\n",maxim);
    return 0;
}