Cod sursa(job #1221586)

Utilizator BlueStrutAndrei Prahoveanu BlueStrut Data 20 august 2014 20:32:58
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<cstdio>
using namespace std;
int i, v[10002], vmax, g[10002], a[10002], n, gmax,pfmax, j;
bool ok[10002];
int max(int a, int b){if (a>=b) return a; else return b;}
int min(int a, int b){if (a<=b) return a; else return b;}
int main(){
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    scanf("%d%d", &n, &gmax);
    for (i=1;i<=n;i++) scanf("%d%d", &g[i], &v[i]);
    vmax=0; ok[0]=true; a[0]=0; pfmax=0;
    for (i=1;i<=n;i++) for (j=vmax;j>=0;j--)
    if ((ok[j]==true)&&(j+g[i]<=gmax)) {
        ok[j+g[i]]=true;
        if (vmax<j+g[i]) vmax=j+g[i];
        a[j+g[i]]=max(a[j]+v[i], a[j+g[i]]);
        if (a[j+g[i]]>pfmax) pfmax=a[j+g[i]];
    }
    printf("%d\n", pfmax);
    return 0;
}