Cod sursa(job #3129389)

Utilizator cristina_ovidiuCristina Ovidiu Lucian cristina_ovidiu Data 14 mai 2023 12:02:12
Problema Problema rucsacului Scor 15
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>

#define max(a,b)    ((a) > (b) ? (a) : (b))

void avSp(FILE *f){
    char c=getc(f);
    while(isspace(c)){
        c=getc(f);
    }
    ungetc(c,f);
}

typedef struct{
    int g,p;
}obj;

int solve(int n,int G,obj *v){
    int (*M)[n+5] = malloc((n+5)*(G+5)*sizeof(int));

    for(int i=0;i<=n;++i){
        for(int g=0;g<=G;++g){
            if(i == 0 || g == 0){
                M[i][g] = 0;
            }
            else if(v[i-1].g <= g){
                M[i][g] = max(v[i-1].p + M[i-1][g - v[i-1].g],M[i-1][g]);
            }
            else{
                M[i][g] = M[i-1][g];
            }
        }
    }

    return M[n][G];
}

int main(){
    stdin = freopen("rucsac.in","r",stdin);
    stdout = freopen("rucsac.out","w",stdout);

    int n;
    int g;
    scanf("%d %d",&n,&g);

    obj *v = malloc(n * sizeof(obj));

    for(int i=0;i<n;++i){
        avSp(stdin);
        scanf("%d %d",&v[i].g,&v[i].p);
    }

    printf("%d\n",solve(n,g,v));


    return 0;
}