您的位置:首页 > 编程语言 > Go语言

Algorithm Gossip: 背包问题(Knapsack Problem)

2015-02-02 02:59 417 查看
/****************************************
*  File Name  : arithmetic.c
*  Creat Data : 2015.2.2
*  Author     : ZY
*****************************************/

/*Algorithm Gossip: 背包问题(Knapsack Problem)*/
/*假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重
范围内可得之总价物品,假设是水果好了,水果的编号、单价与重量
如下所示:
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+1;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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: