#include <bits/stdc++.h>
using namespace std;
int w[4]={2, 1, 3, 2};
int v[4]={3, 2, 4, 2};
int n=4, W=5;
// Recursion algorithm
int REC(int num, int rem)
{
int res;
if(num == n) res = 0;
else if(rem < w[num]) res = REC(num + 1, rem);
else res = max(REC(num + 1, rem), REC(num + 1, rem-w[num]) + v[num]);
return res;
}
int dp[5][6]={0};
int DP(int rem)
{
int i=0, j=0;
for(i = 0; i < n; i++)
{
for(j = 0; j <= W; j++)
{
if(w[i] > j) dp[i+1][j] = dp[i][j];
else dp[i+1][j] = max(dp[i][j], dp[i][j-w[i]]+v[i]);
}
}
return dp[n][rem];
}
// Complete Knapsack Problem
int DP2(int rem)
{
int i=0, j=0;
for(i = 0; i < n; i++)
{
for(j = 0; j <= W; j++)
{
if(w[i] > j) dp[i+1][j] = dp[i][j];
else dp[i+1][j] = max(dp[i][j], dp[i+1][j-w[i]]+v[i]);
}
}
return dp[n][rem];
}
int main()
{
int res;
res = REC(0, W);
res = DP(W);
res = DP2(W);
cout << res;
return 0;
}
Knapsack Problem(背包问题)
最新推荐文章于 2022-09-19 09:17:48 发布