#include <iostream>
#include<algorithm>
using namespace std;
const int N=15;//假设物品最多个数
int v[N]={0,8,10,6,3,7,2}; //价格
int w[N]={0,4,6,2,2,5,1}; //重量
int main()
{
int m[N][N]={0}; //m[i][j]数组代表在第i件物品,背包容量为j时候能获得最大的价值
int n=6,c=12;//设物品个数为6,背包容量为12
for(int i=1;i<=n;i++) //遍历物品个数
{
for(int j=1;j<=c;j++)//各种容量情况
{
if(j>=w[i])//若此时背包容量大于当前物品重量
//这里的m[i-1][j]就是第i-1个物品在j容量下的价值
//m[i-1][j-w[i]]这就是i-1个物品时候,背包容量为j-w[i]时候的最大价值
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]);
else//背包容量小于当前物品重量
m[i][j]=m[i-1][j];//维持第i-1个物品时候的背包重量
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=c;j++)
{
cout<<m[i][j]<<' ';
}
cout<<endl;
}
system("pause");
return 0;
}
01背包问题 动态规划DP
最新推荐文章于 2024-09-19 11:52:15 发布