Pagini recente » Cod sursa (job #3367228) | Cod sursa (job #3364726) | Cod sursa (job #3364561) | Cod sursa (job #3367731) | Cod sursa (job #3367625)
#include <stdio.h>
#define N 5000
#define K 10000
#define INF 500000001
int profit[N][K+1];
int max(int x, int y) {
return (x > y ? x : y);
}
int main(void) {
FILE *fin = fopen("rucsac.in", "r");
int n, k;
fscanf(fin, "%d%d", &n, &k);
for (int i = 0; i < n; i++) {
for (int j = 1; j <= k; j++) {
profit[i][j] = -INF;
}
int g_i, p_i;
fscanf(fin, "%d%d", &g_i, &p_i);
for (int j = 1; j <= k; j++) {
if (i > 0) {
profit[i][j] = profit[i-1][j];
if (j >= g_i && profit[i-1][j-g_i] + p_i > profit[i-1][j]) {
profit[i][j] = profit[i-1][j-g_i] + p_i;
}
} else {
if (j == g_i) {
profit[i][j] = p_i;
}
}
}
}
fclose(fin);
FILE *fout = fopen("rucsac.out", "w");
int profit_max = -INF;
for (int j = 1; j <= k; j++) {
profit_max = max(profit_max, profit[n-1][j]);
}
fprintf(fout, "%d\n", profit_max);
fclose(fout);
return 0;
}