鱼C论坛

 找回密码
 立即注册
查看: 993|回复: 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语言思路...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-28 14:32:44 | 显示全部楼层
你说的什么东西。。。你自己看得懂吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-28 17:00:26 | 显示全部楼层
#include <stdio.h>
#define size 20
struct stacks
{
int data[size];
int top;
}stack;void main()
{
  int w[size];
  int V;
  int k=0;   
  int i=0;
  int j=1;
  int number;
  int s=0;
  
  printf("\n请输入可供选择装入物品的个数:");
  scanf("%d",&number);
  printf("\n请输入各件物品的体积:");
  for(i=0;i<number;i++)
  scanf("%d",&w[i]);
  for(i=0;i<number;i++)
  s=s+w[i];
  printf("\n可供选择的物品的总体s=%d\n",s);
  printf("\n请输入背包的总体积:");
  scanf("%d",&V);
  if(V<0||V>s)
  printf("\n输入背包体积错误");
  printf("\n");
  for(i=0;i<number;i++)
  stack.data[i]=0;
  stack.top=0;
  do
  {
  while(V>0&&k<=number)
  {
  if(V>=w[k])
  {
  stack.data[stack.top]=k;
  stack.top++;
  V-=w[k];
  }
  k++;
  }
  if(V==0)
  {
  printf("第%d个符合条件的解:",j);
  for(i=0;i<stack.top;i++)
  {
  printf("%d ",w[stack.data[i]]);
  }
  j++;
  printf("\n");
  }
  k=stack.data[--stack.top];
  stack.data[stack.top]=0;
  V+=w[k];
  k++;
  }while(!(stack.top==0&&k==number));}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 19:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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