Pagini recente » Cod sursa (job #2110825) | Cod sursa (job #2585918) | Cod sursa (job #1179307) | Cod sursa (job #2449737) | Cod sursa (job #2930118)
#include <cstdio>
#include <iostream>
using namespace std;
FILE *fin, *fout;
const int NMAX = 5000;
int w[NMAX + 5], p[NMAX + 5];
int dp[2][10005];
int main()
{
fin = fopen("rucsac.in", "r");
fout = fopen("rucsac.out", "w");
int n, g;
fscanf(fin, "%d%d", &n, &g);
for(int i = 1; i <= n; i++)
fscanf(fin, "%d%d", &w[i], &p[i]);
for(int i = 0; i <= g; i++)
dp[0][g] = 0;
int lin = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= g; j++)
{
if(j < w[i])
{
dp[lin][j] = dp[1 - lin][j];
continue;
}
dp[lin][j] = max(dp[1 - lin][j], dp[1 - lin][j - w[i]] + p[i]);
}
lin = 1 - lin;
}
fprintf(fout, "%d", dp[1 - lin][g]);
fclose(fin);
fclose(fout);
return 0;
}