Pagini recente » Cod sursa (job #1549810) | Cod sursa (job #1786230) | Cod sursa (job #92023) | Cod sursa (job #2676511) | Cod sursa (job #3163686)
#include <fstream>
using namespace std;
ifstream cin("rucsac.in");
ofstream cout("rucsac.out");
int n,G,sol,maxi;
int g[10002],p[10002];
int l,dp[10002];
int main()
{
cin>>n>>G;
for(int i=1;i<=n;i++)
cin>>g[i]>>p[i];
dp[0]=0;
///dp[i] = profitul maxim pe care il obtin cu greutatea i
for(int i=1;i<=G;i++)
dp[i]=-1;
maxi=0;
for(int i=1;i<=n;i++)
{
///facem toate sumele posibile cu g[i]
for(int j=maxi;j>=0;j--)
if(dp[j]!=-1)
{
if(j+g[i]<=G&&dp[j+g[i]]<dp[j]+p[i])
{
dp[j+g[i]]=dp[j]+p[i];///greutatea precedentului (dp[j])+profitul celui actual
maxi=max(maxi,j+g[i]);
}
}
}
for(int i=1;i<=G;i++)
sol=max(sol,dp[i]);
cout<<sol;
return 0;
}