/* 背包問題 說明: 假設有一個背包的負重最多可達八公斤,而希望在背包中裝入負重的范圍內可得之總價物品,假設是水果好了,水果的編號,單價與重量如下所 示: 0 李子 4kg NT$4500 1 蘋果 5kg NT$5700 2 橘子 2kg NT$2250 3 草莓 1kg NT$1100 4 甜瓜 6kg NT$6700 解法: 略 */ #include <stdio.h> #include <stdlib.h> #define LIMIT 8 #define N 5 #define MIN 1 struct body { char name[20]; int size; int price; }; typedef struct body object; int main(void) { int item[LIMIT + 1] = {0}; int value[LIMIT + 1] = {0}; int newvalue, i, s, p; object a[] = {{"李子", 4, 4500}, {"蘋果", 5, 5700}, {"橘子", 2, 2250}, {"草莓", 1, 1100}, {"甜瓜", 6, 6700} }; for(i = 0; i < N; i++) { for(s = a[i].size; s <= LIMIT; s++) { p = s - a[i].size; newvalue = value[p] + a[i].price; if(newvalue > value[s]) { value[s] = newvalue; item[s] = i; } } } printf("物品\t價格\n"); for(i = LIMIT; i >= MIN; i = i- a[item[i]].size) { printf("%s\t%d\n", a[item[i]].name, a[item[i]].price); } printf("合計\t%d\n", value[LIMIT]); return 0; }
運行結果:

