Pagini recente » Cod sursa (job #2617195) | Cod sursa (job #2893689) | Cod sursa (job #2563152) | Cod sursa (job #2333393) | Cod sursa (job #2878216)
#include <bits/stdc++.h>
#define MAXN 5005
#define MAXG 10005
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n, g, dp[MAXN][MAXG];
struct Obiect {
int w, p;
} obiecte[MAXN];
void citire() {
fin >> n >> g;
for (int i = 1; i <= n; i++)
fin >> obiecte[i].w >> obiecte[i].p;
}
void rezolvare() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= g; j++) {
dp[i][j] += dp[i - 1][j];
if (dp[i][j])
dp[i][j + obiecte[i].w] += obiecte[i].p;
}
dp[i][obiecte[i].w] += obiecte[i].p;
}
/*cout << " ";
for (int j = 1; j <= g; j++)
cout << j << ' ';
cout << '\n';
for (int i = 1; i <= n; i++) {
cout << i << ". ";
for (int j = 1; j <= g; j++)
cout << dp[i][j] << ' ';
cout << '\n';
}*/
int maxi = INT_MIN;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= g; j++)
if (dp[i][j] > maxi)
maxi = dp[i][j];
fout << maxi;
}
int main() {
citire();
rezolvare();
return 0;
}