【背包问题】
/* 背包问题 说明: 假设有一个背包的负重最多可达八公斤,而希望在背包中装入负重的范围内可得之总价物品,假设是水果好了,水果的编号,单价与重量如下所 示: 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; }
运行结果:
转载本博请联系作者! 如有问题请在评论区评论或者发邮件:@libras