动态规划
0-1 背包问题:若有物品 n 个,每个物品的价值 Value,用 vi 表示,每个物品的 重量 weight 用 wi 表示,其中 vi 和 wi 均为非负数。设背包的总容量为 W,且 W 为非负数。现需要考虑的问题是:如何选择装入背包的物品,使装入背包的 物品总价值最大。
#include"iostream"
#include"cstring"
using namespace std;
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int n, c, i;
int w[100], v[100];
int dp[10000];
cout<<"输入物品的数量";
cin >> n ;
cout<<"输入背包的容量";
cin>> c;
cout<<"请输入物品的价值"<<endl;
for (i = 1; i <= n; i++)
{
cin >> v[i];
cout<<"物品"<<i<<"的价值为"<<v[i]<<endl;
}
for (i = 1; i <= n; i++)
{
cout<<"物品"<<i<<"的重量为"<<endl;
cin >> w[i];
}
memset(dp, 0, sizeof(dp));
for (i = 1; i <= n; i++)
{
for (int j = c; j >= w[i]; j--)
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
cout<<"背包能装的最大价值为";
cout << dp[c] << '\n';
return 0;
}