zoukankan      html  css  js  c++  java
  • 搜索与回溯 上机训练 4

    题目:
    一个集合里有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.
  • 相关阅读:
    架构漫谈阅读笔记(1)
    第一周学习进度
    2月13号寒假总结
    2月12日寒假总结
    2月11日寒假总结
    2月10日寒假总结
    寒假学习进度笔记一
    mapreduce课上实验
    个人课程总结
    用户体验评价
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412474.html
Copyright © 2011-2022 走看看