Pagini recente » Cod sursa (job #2001701) | Cod sursa (job #258055) | Cod sursa (job #229223) | Cod sursa (job #2746797) | Cod sursa (job #1606886)
#include<fstream>
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
int dp[5001][10001];
int N,G;
int g[5001],val[5001];
int main(){
in>>N>>G;
for(int i=1;i<=N;i++) in>>g[i]>>val[i];
for(int i=1;i<=N;i++){
if(val[i]!=0){
for(int j=1;j<=G;j++) dp[i][j]=dp[i-1][j];
dp[i][ g[i] ] = max( dp[i][ g[i] ] , val[i]);
for(int j=1;j<=G;j++){
if( dp[i-1][j] != 0 && j+g[i] <= G){
dp[i][ j + g[i] ] = max( dp[i][ j + g[i] ] , dp[i-1][j] + val[i] );
}
}
}
/*out<<"0 ";
for(int j=1;j<=G;j++){
if(dp[i][j]) out<<dp[i][j]<<' ';
else out<<'-'<<' ';
}
out<<'\n';*/
}
int ans=0;
for(int j=1;j<=G;j++) ans=max(ans,dp[N][j]);
out<<ans<<'\n';
return 0;
}