zoukankan      html  css  js  c++  java
  • POJ-1564 dfs

     1  #include"cstring"
     2  #include"cstdio"
     3  const int maxn=100+5;
     4  int nux[maxn];
     5  int nua[maxn];//解的集合 
     6  int t;//t为和 
     7  int n;//n为元素个数 
     8  bool flag;//判断是否有解 
     9  void dfs(int sum,int cur,int k){//sum剩余的大小 k为下标,cur为元素个数 
    10      if(sum==0){
    11          flag=false;//证明有解 
    12          for(int i=0;i<cur;i++)
    13              if(i==0)
    14                  printf("%d",nua[i]);
    15              else
    16                  printf("+%d",nua[i]);
    17          printf("
    ");
    18          return;
    19      }
    20      for(int i=k;i<n;i++){
    21          if(i==k||nux[i]!=nux[i-1]&&sum>=nux[i]){//判断是否重叠 
    22              nua[cur]=nux[i];
    23              dfs(sum-nux[i],cur+1,i+1);
    24          }
    25     }
    26  }
    27  int main(){
    28      while(scanf("%d%d",&t,&n)!=EOF){
    29          if(n==0&&t==0)    break;
    30          for(int i=0;i<n;i++){
    31              scanf("%d",&nux[i]);
    32          }
    33          flag=true;
    34          printf("Sums of %d:
    ", t);
    35          dfs(t,0,0);
    36          if(flag)
    37              printf("NONE
    ");
    38      }
    39      return 0;
    40  }
  • 相关阅读:
    构造器
    方法
    Arrays常用的类
    栈内存和堆内存
    方法的重载
    数组遍历
    Scanner类
    连接符和三元运算符
    逻辑运算和位运算
    CSAPP笔记(第二章 信息的表示和处理)-02
  • 原文地址:https://www.cnblogs.com/hutonm/p/5477677.html
Copyright © 2011-2022 走看看