0/1背包挑选物品

时间:2016-04-08 21:08:42

标签: dynamic-programming knapsack-problem

以下代码显示了可以采取的最大值,但我也想知道选择了哪些项目以获得最大值。我是否确定在以下代码中选择了哪些项目?

#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);
}

0 个答案:

没有答案