Pagini recente » Cod sursa (job #208477) | Cod sursa (job #2989450) | Cod sursa (job #644582) | Cod sursa (job #1571461) | Cod sursa (job #3259951)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rucsac.in");
ofstream fout ("rucsac.out");
//int dp[5005][10005]; // Optimizare: tinem doar 2 linii (nu avem nevoie decat de i si i-1)
int dp[2][10005];
int p[5005], w[5005];
int main()
{
fin.tie(0); fin.sync_with_stdio(false);
int n, g; fin>>n>>g;
for (int i=1; i<=n; i++) fin>>w[i]>>p[i];
/*
int l=0;
for (int i=1; i<=n; i++) {
for (int j=0; j<=g; j++) {
dp[1-l][j]=dp[l][j];
if (j>=w[i]) dp[1-l][j]=max(dp[1-l][j], dp[l][j-w[i]]+p[i]);
}
l=1-l;
}
fout<<dp[l][g];
*/
// Varianta mea imbunatatita a variantei mele de anul trecut (a XI-a) care mergea cu i%2 && (i-1)%2
for (int i=1; i<=n; i++) {
for (int j=0; j<=g; j++) {
dp[i&1][j]=dp[(i-1)&1][j];
if (j>=w[i]) dp[i&1][j]=max(dp[i&1][j], dp[(i-1)&1][j-w[i]]+p[i]);
}
}
fout<<dp[n&1][g];
return 0;
}