Cod sursa(job #1780570)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 16 octombrie 2016 13:37:03
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>

FILE *in, *out;

int max(int a, int b) {
    if(a > b) {
        return a;
    }
    return b;
}

struct obiecte
{
    int w, p;
};

int g[10001];
obiecte v[5000];

int main ()
{
    int n, wt;

    in = fopen("rucsac.in", "r");
    out = fopen("rucsac.out", "w");

    fscanf(in, "%d%d", &n, &wt);

    for(int i = 0; i < n; i++) {
        fscanf(in, "%d%d", &v[i].w, &v[i].p);
    }
    g[0] = 1;
    for(int i = 0; i < n; i++) {
        for(int j = wt; j >= 0; j--) {
            if(g[j] != 0) {
                if(j + v[i].w <= wt) {
                    g[j + v[i].w] = max(g[j + v[i].w], g[j] + v[i].p);
                }
            }
        }
    }
    int maxim;
    for(int i = 0; i <= wt; i++) {
        maxim = max(maxim, g[i]);
    }

    fprintf(out, "%d\n", maxim - 1);

    fclose(in);
    fclose(out);

    return 0;
}