Pagini recente » Cod sursa (job #3332974) | Cod sursa (job #3322044) | Cod sursa (job #3348264) | Diferente pentru concursuri intre reviziile 97 si 182 | Cod sursa (job #3311470)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
const int nmax = 5000, gmax = 10000;
int w[nmax+1], p[nmax+1];
int dp[nmax+1][gmax+1];
// dp[i][j] (i este subinteles) = profitul maxim pe care il pot obtine din primele i elemente, stiind ca aceste elemente au greutatea exact j
void solve() {
int n, g, i, j;
fin >> n >> g;
for (i = 1; i<=n; i++)
fin >> w[i] >> p[i];
for (i = 1; i<=n; i++) {
for (j = 0; j<w[i]; j++)
dp[i][j] = dp[i-1][j];
for (j = w[i]; j<=g; j++)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + p[i]);
}
fout << dp[n][g];
}
int main() {
solve();
return 0;
}