zoukankan      html  css  js  c++  java
  • 部分和

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cmath>
     5 #include <cstring>
     6 
     7 using namespace std;
     8 int n,k,c,sum,s[201],vis[201],ok;    //sum和,s【】表示输入数据,vis【】表示是否用过。
     9 
    10 void dfs(int c1,int sum1)
    11 {
    12     if(sum1==k)
    13     {
    14         ok=0;
    15         printf("YES
    ");
    16         for(int j=0;j<c1;j++)
    17             if(vis[j])
    18                 printf("%d ",s[j]);
    19         printf("
    ");
    20         
    21     }
    22     for(int i=c1;i<n;i++)
    23     {
    24         sum1+=s[i];
    25         vis[i]=1;
    26         dfs(i+1,sum1);
    27         vis[i]=0;
    28         sum1-=s[i];
    29     }
    30         
    31 }
    32         
    33 
    34 int main()
    35 {
    36     while(~scanf("%d%d",&n,&k))
    37     {
    38         c=0;
    39         ok=1;
    40         for(int i=0;i<n;i++)
    41             scanf("%d",&s[i]);
    42         memset(vis,0,sizeof(vis));
    43         sum=0;
    44         dfs(c,sum);
    45         if(ok)
    46             printf("NO
    ");
    47     }
    48     return 0;
    49 }
    View Code

    从a1开始按顺序决定每个数加或者不加,在全部n个数都决定后判断是否和等于给定的值k即可。

  • 相关阅读:
    类的加载顺序
    自定义形状类
    java的参数传递
    复数相加+equels、hashcode、clone<二>
    复数相加+equels、hashcode、clone<一>
    命令行程序
    计算阶乘
    控制程序的流程
    java运算符
    强制类型转换细节解析
  • 原文地址:https://www.cnblogs.com/WDKER/p/5375669.html
Copyright © 2011-2022 走看看