请教:什么是"背包问题"?

zhangyiheng 2003-04-16 01:18:55
经常看见人家说"背包问题"
可我老是不知道是什么东西,敬请指教!
...全文
308 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
3851391 2003-04-27
  • 打赏
  • 举报
回复
“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为 S,设有 N 件物品,其重量分别为w1,w2,...,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于 S 。
如下程序均能求得“背包问题”的一组解,其中程序 5.1 是“背包问题”的递归解法,而程序 5.2 是“背包问题”的非递归解法。

[程序 5.2]
#include <stdio.h>
#define N 7
#define S 15
typedef struct {
int S;
int n:
int job;
} KNAPTP;
int w[N+1] = {0,1,4,3,4,5,2,7};
int knap(int S,int n);
main(){
if ( knap(S,N) ) printf("0K!\n" );
else printf( "N0!\n" );
int knap( int S,int n )
{ KNAPTP stack[100],x;
int top, k, rep;
x.s = s; x.n = n;
x.job = 0;
top = l; stack[top] = x;
k = 0;
while ( __(3)__ ) { !rep&&top--
x = stack[top];
rep = l;
while ( !k && rep ) {
if( x.s=0 ) k = 1; /*已求得一组解*/
else if ( x.S<0 || x.n<=0 ) rep = 0; rep:沒有找到解的退出
else { x.s = __(4)__ ; x.job=1; 沒有找到解x.s-w[x.n]
__(5)__ = x; stack[top++] 存入還可減的值
}
}
if ( !k ) {
rep = 1;
while ( top >= 1 && rep) {
x = stack[top--];
if ( x.job=1){
x.s += w[x.n + 1];
x.job = 2;
stack[++top] = x;
__(6)__ ; x.n++
}
}
}
}
if (k){ */输出一组解*/
while ( top >= 1 ) {
x = StaCk [ top-- ];
if ( x.job == 1 )
printf ( "M\t,w[x.n+1] );
}
}
return k;
}
JOEJOEJOE 2003-04-27
  • 打赏
  • 举报
回复
背包问题,是由一个数学家想出来的加密算法!
被包问题,是典型的公钥程序之父!
oushunbao 2003-04-27
  • 打赏
  • 举报
回复
找本《运筹学》看看
zhangyiheng 2003-04-18
  • 打赏
  • 举报
回复
我当然学过C,但我觉得只要能看懂程序就行了,管他是什么法.就像那些排序,只要排出来就行了,管他是插入还是选择
wangmin_yjitx 2003-04-18
  • 打赏
  • 举报
回复
用广度艘索和深度搜索都可以
answerzy 2003-04-18
  • 打赏
  • 举报
回复
有性格。
zhangyiheng 2003-04-17
  • 打赏
  • 举报
回复
什么是回朔法?能不能具体点?
thunderx 2003-04-17
  • 打赏
  • 举报
回复
呵呵!你没看书:),也没学过C吗?
cqfanli 2003-04-17
  • 打赏
  • 举报
回复
呵呵,必考的内容呀,大哥 …


===============================================================
http://www.cnitexam.com

中国IT考试网 等级考试,资格&水平考试,NCNE考试,CCNP,MCSE…
立足中国,做最好的考试网站…

http://hilevel.mycool.net
高级程序员、网络设计师的论坛!专门为工程师定制的网上交流空间!
wyy2xjp 2003-04-17
  • 打赏
  • 举报
回复
:) :) :) :)
houhw1728 2003-04-16
  • 打赏
  • 举报
回复
高程里面的背包问题,用的是回朔法
不好理解,
双杯献酒 2003-04-16
  • 打赏
  • 举报
回复
下面的问题就是一个背包问题

有6个数
3,7,9,11,15,18
问哪几个数加起来等于 42 ?

答案 7+9+11+15=42
由于它一般只能通过穷举来分解,因而可用于加密.

2,958

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧