华师一附中OI组
标题:
经典背包问题
[打印本页]
作者:
admin
时间:
2018-6-3 12:03
标题:
经典背包问题
假设有5个物品,重量分别是 4 7 8 9 3,价值分别是5 8 10 13 4,能不能在重量不超过x的情况下得到价值的最大值。
#include<iostream>
#include<iomanip>
using namespace std;
int w[6]= {0,4,7,8,9,3}; //假设有5个物品
int v[6]= {0,5,8,10,13,4};
int f[105][6]; //f[x][y] 表示重量不超过x时最大的价值
int g[105];
int i,j;
int t1,t2,t;
int main()
{
cout<<"\n========way1=========\n";
for(i=1; i<=5; i++)
for (j=0; j<=100; j++)
{
if (j>=w[i]) ///这样写很清晰吧!
{
t1=f[j-w[i]][i-1]+v[i];
t2=f[j][i-1];
t=max(t1,t2);
}
else t=f[j][i-1];
f[j][i]=t;
}
for (i=1; i<=5; i++)
{
for (j=0; j<=13; j++) cout<<setw(4)<<f[j][i];
cout<<'\n';
}
cout<<"\n========way2=========\n";
g[0]=0;
for (i=1; i<=5; i++)
{
for (j=100; j>=w[i]; j--)
{
if (j>=w[i])
{
t1=g[j-w[i]]+v[i];
t2=g[j];
t=max(t1,t2);
}
g[j]=t;
}
for (j=0; j<=13; j++) cout<<setw(4)<<g[j];
cout<<endl;
}
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2