搜索与回溯 上机训练 4

来源:互联网 发布:matlab2014b破解版mac 编辑:程序博客网 时间:2024/05/17 02:13

题目:
一个集合里有N个数,取S个数和为R。
输入样例1
5(有五个数)10(和为10)
2 2 6 4 5(这个集合)
输出样例2
2 2 6
6 4
输入样例2
5 3 (不用解释了吧)
2 4 3 2 4
输出样例2
no solution!


这题直接搜索中用for判断每一种情况,如果等于R,就输出出来,没有就输出no solution!


代码如下:

var  n,m,p,flag,i:longint;  a,b:array[1..1000]of longint;procedure dfs(now,sum:longint);var  i,j,s:longint;begin  if(now=n+1) then exit;  if (sum=m) and (p>1) then begin      for i:=1 to p do write(a[b[i]],' ');      writeln;      flag:=1;  end;  for i:=now+1 to n do    if a[i]+sum<=m then begin      inc(p);      b[p]:=i;      dfs(i,sum+a[i]);      dec(p);    end;end;begin  read(n,m);  for i:=1 to n do read(a[i]);    dfs(0,0);  if flag=0 then writeln('no solution!');end.
2 0