直接附上代码,详细说明请参阅以下内容
https://blog.csdn.net/hhl895937794/article/details/78151301
代码如下:
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
int dp[100]; //存放决策表
for (int i = 0; i < 100;i++)
dp[i] = 0;
int v[] = {4,3,4,5};//价值
int w[] = {5,7,8,15 };//重量
int W = 15;//背包的容量
int n = 4;
/*
//完全背包问题
for (int i = 0; i < n; i++) {
for (int j = w[i]; j <= W; j++) {//从前往后循环
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
for (int k = 0; k <= W; k++)
cout << setw(5) << dp[k];
cout << endl;
}*/
//以下是0-1背包问题的解
for (int i = 0; i < 4; ++i)
{
for (int j = W; j >= w[i]; --j)
{
int tmp = dp[j - w[i]] + v[i];
dp[j] = max( dp[j], dp[j - w[i]] + v[i] );
}
for (int k = 0; k <= W; k++)
cout <<setw(5)<< dp[k] ;
cout << endl;
}/**/
cout << dp[W]; cout << endl;
return 0;
}