Cod sursa(job #1426216)

Utilizator VAIonescuIonescu Vlad-Andrei VAIonescu Data 29 aprilie 2015 10:02:37
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>
#define max(a,b) a>b?(a):(b)
using namespace std;

const int gmax=10000;
int d[gmax];

int main() {
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    int n,gm,dr=0,macs=0,gi,pi;
    scanf("%d%d",&n,&gm);
    for (register int i=1; i<=gm; ++i) {
        d[i]=-1;
    }
    for (register int i=1; i<=n; ++i) {
        scanf("%d%d",&gi,&pi);
        for (register int j=dr; j>=0; --j) {
            if (d[j]!=-1 && j+gi<=gm && d[j+gi]<d[j]+pi) {
                d[j+gi]=d[j]+pi;
                dr=max(dr,j+gi);
                macs=max(macs,d[j+gi]);
            }
        }
    }
    printf("%d",macs);
    return 0;
}