pascal子集和问题。

子集和问题的一个实例为〈S,C〉。其中,S={X1,X2,…,Xn}是一个正整数的集合,C是一个正整数。编程任务:对于给定的正整数的集合S={X1,X2,…,Xn}和正整... 子集和问题的一个实例为〈S,C 〉。其中,S={ X1 ,X2 ,…,Xn } 是一个正整数的集合,C是一个正整数。
编程任务 :对于给定的正整数的集合S={ X1 ,X2 ,…,Xn } 和正整数C,编程计算S 的一个子集S1 ,使得∑X (X∈S1) = C(子集s1的和等于c)

Input
第一行有2个正整数n和c,n表示s集合中元素的个数,c是子集和的目标值。第二行有n个正整数,表示集合s中的元素

Output
输出一行数据,是子集和问题的解,当问题无解时,输出"No Solution!".(有解时,在解的后面多添加一个空格和一个换行符)

Sample Input
5 10
2 2 6 5 4

Sample Output
2 2 6

这是我的程序program pl;
var
n,m,i,j,k:longint;
a,b:array[1..10000]of longint;
procedure search(x,y:longint);
var i:longint;
begin
if(x=n+1) then exit;
if (y=m) and (j>1) then begin
for i:=1 to j do write(a[b[i]],' ');
writeln;
k:=1;
end;
for i:=x+1 to n do
if a[i]+y<=m then begin
inc(j);
b[j]:=i;
search(i,y+a[i]);
dec(j);
if k=1 then exit;
end;
end;

begin
read(n,m);
for i:=1 to n do read(a[i]);
search(0,0);
if k=0 then writeln('No Solution!');
end.
最后一个测试点超时,数据好像是6000多个数字,求大神们优化啊。
展开
 我来答
cks5013673
2012-02-12 · TA获得超过480个赞
知道小有建树答主
回答量:213
采纳率:66%
帮助的人:216万
展开全部
同学你这个爆搜打得狠猥琐诶;
给你点建议吧优化思想:程序你自己去打打吧;
我的建议就是:先排序;
用快速排序先全部排好,然后再用你的搜索;
意义在于可以少判断很多种情况诶
哈哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-25
展开全部
用回溯与搜索
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式