Pagini recente » Cod sursa (job #2398154) | Cod sursa (job #520593) | Cod sursa (job #3254151) | Cod sursa (job #835689) | Cod sursa (job #2976114)
#include <fstream>
using namespace std;
int m[10005], p[10005], dp[5005][10005], sol[5005];
int main()
{
ifstream cin("rucsac.in");
ofstream cout("rucsac.out");
int n, g, a, b, s=0;
cin>>n>>g;
for(int i=0;i<n;i++)
{
cin>>m[i]>>p[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=g;j++)
{
if(j<m[i])
dp[i+1][j]=dp[i][j];
else
dp[i+1][j]=max(dp[i][j], dp[i][j-m[i]] + p[i]);
}
}
a=n, b=g;
while(dp[a][b]>0)
{
if(dp[a][b]!=dp[a-1][b])
{
sol[a-1]=1;;
b-=m[a-1];
}
a--;
}
for(int i=0;i<n;i++)
{
if(sol[i]==1)
s+=p[i];
}
cout<<s;
return 0;
}