zoukankan      html  css  js  c++  java
  • 部分和问题(搜索简单题)

    部分和问题

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
     http://acm.nyist.net/JudgeOnline/problem.php?pid=1058
    描述
    给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
     
    输入
    首先,n和k,n表示数的个数,k表示数的和。
    接着一行n个数。
    (1<=n<=20,保证不超int范围)
    输出
    如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
    样例输入
    4 13
    1 2 4 7
    样例输出
    YES
    2 4 7
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 using namespace std;
     6 int n,k;
     7 int a[30];
     8 bool way[30];
     9 bool flag=0;
    10 void dfs(int floor,int sum)
    11 {
    12     if(flag)
    13         return;
    14     if(sum>k)
    15         return;
    16     if(floor==n)
    17     {
    18         if(sum==k)
    19         {
    20             flag=1;
    21             cout<<"YES"<<endl;
    22             for(int i=0;i<n;i++)
    23             {
    24                 if(way[i])
    25                     cout<<a[i]<<" ";
    26             }
    27             cout<<endl;
    28         }
    29         return;
    30     }
    31     way[floor]=1;
    32     dfs(floor+1,sum+a[floor]);
    33     way[floor]=0;
    34     dfs(floor+1,sum);
    35 }
    36 int main()
    37 {
    38     int i,j;
    39     freopen("in.txt","r",stdin);
    40     while(cin>>n>>k)
    41     {
    42         flag=0;
    43         memset(way,0,sizeof(way));
    44         for(i=0;i<n;i++)
    45             cin>>a[i];
    46         dfs(0,0);
    47         if(!flag)
    48             cout<<"NO"<<endl;
    49     }
    50 }
  • 相关阅读:
    java前三章总结
    Java入门第二章
    MYSQL 3306设置允许外网访问
    Lnmp Laravel搭建网站需要注意的几点:
    Linux 如何删除网站目录下的user.ini
    Linux Composer的安装
    lnmp切换PHP版本
    解决GitHub的raw.githubusercontent.com无法连接问题
    Linux 7系列默认不能连网的解决办法
    lnmp安装
  • 原文地址:https://www.cnblogs.com/a1225234/p/4906014.html
Copyright © 2011-2022 走看看