Cod sursa(job #1425526)

Utilizator tudorcomanTudor Coman tudorcoman Data 27 aprilie 2015 16:48:19
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb

#include <stdio.h>
#include <string.h>

const char *FI = "rucsac.in", *FO=  "rucsac.out";
const int MAX_N = 5000;
const int MAX_G = 10000;

struct Elem {
    int w,p;
    
    void Read () {
        scanf("%d%d",&w,&p);
    }
    
}v[MAX_N + 1];

inline int MAX (int a, int b) { return (a > b) ? a : b; }

int d[MAX_G + 2];

int main(int argc, const char * argv[]) {
    
    freopen (FI,"r",stdin);
    freopen(FO,"w",stdout);
    
    int N,G,P = 0;
    scanf("%d%d",&N,&G);
    
    memset(d,-1,sizeof(d)), d[0] = 0;
    
    for (int i=1; i <= N; ++ i)
        v[i].Read();
    
    for (int i=1; i <= N; ++ i) {
        
        for (int j = P; j > -1 ; -- j) {
            
            if (j + v[i].w <= G) {
            if (d[j] > -1) {
                d[j + v[i].w] = MAX (d[j + v[i].w], d[j] + v[i].p);
                P =MAX (P,j + v[i].w);
            }
        }
        }
    }
    
    int Ans = 0;
    
    for (int i=1; i <= G; ++ i)
        Ans = MAX (d[i],Ans);
    
    printf("%d\n",Ans);
    return 0;
}