|
假设有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;
- }
复制代码 |
|