鱼C论坛

 找回密码
 立即注册
查看: 1101|回复: 2

求教C语言背包问题做法

[复制链接]
发表于 2015-3-28 10:59:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , … , wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + … + wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:
(1,4,3,2)
(1,4,5)
(8,2)
(3,5,2)。

求C语言思路...

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-28 14:32:44 | 显示全部楼层
你说的什么东西。。。你自己看得懂吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-28 17:00:26 | 显示全部楼层

  1. #include <stdio.h>
  2. #define size 20
  3. struct stacks
  4. {
  5. int data[size];
  6. int top;
  7. }stack;void main()
  8. {
  9.   int w[size];
  10.   int V;
  11.   int k=0;   
  12.   int i=0;
  13.   int j=1;
  14.   int number;
  15.   int s=0;
  16.   
  17.   printf("\n请输入可供选择装入物品的个数:");
  18.   scanf("%d",&number);
  19.   printf("\n请输入各件物品的体积:");
  20.   for(i=0;i<number;i++)
  21.   scanf("%d",&w[i]);
  22.   for(i=0;i<number;i++)
  23.   s=s+w[i];
  24.   printf("\n可供选择的物品的总体s=%d\n",s);
  25.   printf("\n请输入背包的总体积:");
  26.   scanf("%d",&V);
  27.   if(V<0||V>s)
  28.   printf("\n输入背包体积错误");
  29.   printf("\n");
  30.   for(i=0;i<number;i++)
  31.   stack.data[i]=0;
  32.   stack.top=0;
  33.   do
  34.   {
  35.   while(V>0&&k<=number)
  36.   {
  37.   if(V>=w[k])
  38.   {
  39.   stack.data[stack.top]=k;
  40.   stack.top++;
  41.   V-=w[k];
  42.   }
  43.   k++;
  44.   }
  45.   if(V==0)
  46.   {
  47.   printf("第%d个符合条件的解:",j);
  48.   for(i=0;i<stack.top;i++)
  49.   {
  50.   printf("%d ",w[stack.data[i]]);
  51.   }
  52.   j++;
  53.   printf("\n");
  54.   }
  55.   k=stack.data[--stack.top];
  56.   stack.data[stack.top]=0;
  57.   V+=w[k];
  58.   k++;
  59.   }while(!(stack.top==0&&k==number));}
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表