![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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多个数字,求大神们优化啊。 展开
编程任务 :对于给定的正整数的集合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多个数字,求大神们优化啊。 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询