一.问题
一个背包可以放入总质量为Total的物品。现有n件物品,质量分为:w[0],w[1],w[2]...w[n-1],并且从w[n-1],w[n-2],w[n-3]...到w[0],物品质量从重到轻。问:是否能够选出一组质量尽可能大的物品,并把它们放入背包,使得放入的质量之和正好是Total?
二.解法
1.单链表来实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct NODE{
int n;
struct NODE* next;
}NODE;
void Create(NODE* head, int n) {
//尾插法创建单链表
NODE* q = head;
for (; n > 0; n--) {
NODE* p = (NODE*)malloc(sizeof(NODE));
if (p) {
int s;
scanf("%d",&s);
p->n = s;
q->next = p;
q = p;
}
}
q->next = NULL;
}
void Output(NODE* head) {
//输出单链表中的数据
NODE* p = head->next;
while (p) {
printf("%d ", p->n);
p = p->next;
}
}
void Function(NODE* head,int TotalWeight){
int surplus=TotalWeight;
NODE* q=head->next;
while(q){
if(surplus-(q->n)>0){
printf("放%d(kg)