以下代码显示了可以采取的最大值,但我也想知道选择了哪些项目以获得最大值。我是否确定在以下代码中选择了哪些项目?
#include<iostream>
#include<cstring>
using namespace std;
int n,wight[1000],cost[1000],cap;
int dp[1000][1000];
int knap(int i,int w)
{
if(i==n)
return 0;
if(dp[i][w]!=-1)
return dp[i][w];
int pos1=0,pos2=0;
if(wight[i]+w<=cap)
pos1=cost[i]+knap(i+1,w+wight[i]);
pos2=knap(i+1,w);
return dp[i][w]=max(pos1,pos2);
}
main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>wight[i]>>cost[i];
}
cin>>cap;
memset(dp,-1,sizeof(dp));
cout<<knap(0,0);
}