?? 背包問題2.cpp.bak
字號:
/*
我真誠地保證
我自己獨立地完成了整個程序從分析、設計到編碼的所有工作。
如果在上述過程中,我遇到了什么困難而求教于人,那么,我將在程序實習報告中
詳細地列舉我所遇到的問題,以及別人給我的提示。
我的程序里中凡是引用到其他程序或文檔之處,
我都已經在程序的注釋里很清楚地注明了引用的出處。
我從未抄襲過別人的程序,也沒有盜用別人的程序,
不管是修改式的抄襲還是原封不動的抄襲。
我編寫這個程序,從來沒有想過要去破壞或妨礙其他計算機系統的正常運轉。
學號:00548250
姓名:卞超軼
*/
#include <iostream.h>
#include <assert.h>
struct Goods //定義商品記錄類型
{
int weight; //重量
int value; //價值
};
void main()
{
int t, m;
cout << "請輸入背包的載重(必須為整數,否則報錯):";
cin >> t;
assert(t > 0); //背包載重大于零
cout << "請輸入商品的個數:";
cin >> m;
assert(m > 0); //商品個數大于零
Goods *a;
a = new Goods[m+1];
assert(a != NULL);
int i, j;
cout << "請依次輸入各商品的重量和價值(用空格分開,同時必須為整數,否則報錯):\n";
for (i = 1; i <= m; i++)
{
cin >> a[i].weight;
assert(a[i].weight > 0); //商品重量大于零
cin >>a[i].value;
assert(a[i].value > 0); //商品價值大于零
}
int **max;
max = new int*[m+1];
for (i = 0; i <= m; i++)
max[i] = new int[t + 1];
assert(max != NULL);
for (i = 0; i <= m; i++)
for (j = 0; j <= t; j++)
max[i][j] = 0; //申請動態數組并初始化,
//max[i][j]表示只有前i個商品且背包載重為j時能取得的最大價值
for (i = 1; i <= m; i++)
for (j = 0; j <= t; j++)
{
if (j < a[i].weight)
max[i][j] = max[i-1][j];
else
{
if (max[i-1][j] > max[i-1][j-a[i].weight] + a[i].value)
max[i][j] = max[i-1][j];
else max[i][j] = max[i-1][j-a[i].weight] + a[i].value;
}
}
cout << "能取得的最大價值為:" << max[m][t] << endl;
delete[]a;
delete[]max;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -