Cod sursa(job #3298535)

Utilizator robertcd29Chira Robert-Denis robertcd29 Data 31 mai 2025 02:32:15
Problema Problema rucsacului Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    int value;
    int weight;
} obiect;


obiect v[5000];
int dp[10000] = {0};

int main(void)
{

    int n, G;

    FILE *fin = NULL;
    if((fin = fopen("rucsac.in", "r")) == NULL) {
        fprintf(stderr, "Eroare la deschidere.\n");
        fclose(fin);
        return 1;
    }

    FILE *fout = NULL;
    if((fout = fopen("rucsac.out", "w")) == NULL) {
        fprintf(stderr, "Eroare la deschidere.\n");
        return 1;
    }

    fscanf(fin, "%d %d", &n, &G);

    for(int i = 0; i < n; i++) {
        fscanf(fin, "%d %d", &v[i].value, &v[i].weight);
    }

    for(int i = 0 ; i < n; i++)
    {
        for(int j = G; j >= v[i].weight; j--) {
            if(dp[j] < dp[j - v[i].weight] + v[i].value) 
            {
                dp[j] = dp[j - v[i].weight] + v[i].value;
            }
        }
    }
    
    int Pmax = 0;
    for(int i = 0; i <= G; i++) {
        if(dp[i] > Pmax) {
            Pmax = dp[i];
        }
    }

    fprintf(fout, "%d\n", Pmax);
    fclose(fin);
    fclose(fout);
    return 0;
}