Cod sursa(job #1774697)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 9 octombrie 2016 12:32:16
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>
#include <stdlib.h>
FILE *in,*out;
int r[50000000],w[5001],p[5001];
int min(int a,int b)
{
    if(a >= b && b != 0) return b;
    if(a <= b && a != 0) return a;
}
int main()
{
    in = fopen("rucsac.in","r");
    out = fopen("rucsac.out","w");
    int n,g,i,j,fmax = 0;
    fscanf(in,"%d %d\n",&n,&g);
    for(i = 1; i <= n; i ++)
        fscanf(in,"%d %d\n",&w[i],&p[i]);
    r[0] = 1;
    for(i = 1; i <= n; i ++)
    {
        for(j = fmax; j >= 0; j --)
        {
            if(r[j] != 0 && r[j] + w[i] <= g+1)
            {
                r[p[i] + j] = min(r[j] + w[i],r[p[i] + j]);
                if(p[i] + j > fmax)
                fmax = p[i] + j;
            }

        }
    }
    fprintf(out,"%d",fmax);
    return 0;
}