Pagini recente » Cod sursa (job #994958) | Cod sursa (job #1519726) | Cod sursa (job #2115871) | Cod sursa (job #2854633)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int dp[5010][10010];
int w[5010], p[5010];
int main()
{
int n, g;
fin>>n>>g;
for(int i = 1; i <= n; i++){
fin>>w[i]>>p[i];
for(int j = 1; j <= g; j++){
dp[i][j] = dp[i-1][j];
if(j >= w[i]){
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + p[i]);
}
}
}
fout<<dp[n][g]<<"\n";
for(int i = n; i != 0;){
for(int j = g; j != 0;){
while(dp[i][j] == dp[i-1][j]){
i--;
}
fout<<i<<" ";
j-=w[i];
i--;
}
}
return 0;
}