揹包價值最大問題

2021-08-19 22:21:39 字數 2315 閱讀 4692

實驗題目

給定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只貓天天象小奴隸一樣,真的好累啊!虎貓隊長想到了乙個辦法,他準備多一些花樣,比如烤全鳥 鹹魚幹還有好多其他的好吃的。多吃肉的好處就是...