【
實驗題目
】
給定n種物品和乙個揹包.物品i的重量是wi,其價值為vi,揹包的容量為c.在選擇物品i裝入揹包時,可以選擇物品i的一部分,1<= i <=n.問應如何選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大
。【
需求
分析】
本演示程式用vs編寫。
1、輸入的形式和輸入值的範圍:1<= i <=n.
2、輸出的形式:
直接輸出結果
程式所能達到的功能:
選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大。
測試資料:
物品個數和揹包容量分別為:5 10
物品重量分別為:2 2 6 5 4
物品價值分別為:6 3 5 4 6
【
概要設計
】
本程式包含3個函式:
1.主函式main()
2.比較函式
cmp()
3.qsort()
各函式間關係如下:cmp
main
qsort
【
詳細設計
】
結點型別
typedef structgoods;
for迴圈
for (i = n - 1; i >= 0; i--)
else
【
除錯分析
】
【
使用說明
】
程式執行後顯示
********************====
物品個數和揹包容量分別為:
********************===
依次按照提示輸入物品個數,揹包容量,重量和價值
【測試結果】
附錄
】
#include
#include
#define maxn 410
typedef struct goods;
goods goods[maxn]; //演算法思路:貪心演算法,每次都向揹包裡面裝入價值最大的物品,如果裝入超過容量c
int cmp(const void *a, const void *b) //比較函式
int main()
printf("物品價值分別為:");
for (i = 0; i < n; i++)
qsort(goods, n, sizeof(goods), cmp);
/*其中第乙個引數是參與排序的陣列名,第二個引數是參與排序的元素個數,第三個引數是單個元素的大小,第四個引數比較函式,
qsort包含在標頭檔案中,此函式根據你給的比較條件進行快速排序,通過指標移動實現排序。排序之後的結果仍然放在原陣列中。
對int型別陣列從小到大排序
int num[100];
int cmp ( const void *a , const void *b )
qsort(num,100,sizeof(num[0]),cmp);*/
for (i = n - 1; i >= 0; i--)
else
}printf("裝入揹包中物品的總價值最大為:%d\n", total);
return 0;
}
C 揹包最大可容價值問題
問題描述 問題描述 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問 應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?問題分析 先將n件物品順序排列,依次裝入揹包,每裝入一件即檢查當時揹包物品體積是否超過c,若裝入該物品後不超過揹包容量c,則裝入,否則棄之取下乙個...
不考慮價值的揹包問題
揹包問題 假設有乙個能裝入總體積為t的揹包和n件體積分別為w1,w2,wn的物品,能否從n件物品中挑選若干件恰好裝滿揹包,使w i1 w i2 w in t,要求找出所有滿足上述條件的解。include include include using namespace std struct item ...
最大價值問題
11只貓和阿呆鳥 題目描述 11只貓去了阿呆鳥的家鄉,準備大吃一頓烤全鳥。結果遇上了巨無霸阿呆鳥,被全部抓走給阿呆鳥做土豆餅了。巨無霸阿呆鳥一次能吃好多好多土豆餅,11只貓天天象小奴隸一樣,真的好累啊!虎貓隊長想到了乙個辦法,他準備多一些花樣,比如烤全鳥 鹹魚幹還有好多其他的好吃的。多吃肉的好處就是...