zoukankan      html  css  js  c++  java
  • NYOJ 1058 部分和问题

    部分和问题

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
     
    描述
    给定整数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
    来源
    经典题目
    上传者
    TC_杨闯亮

    解题:一顿乱搜。。。。。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <vector>
     6 #include <climits>
     7 #include <algorithm>
     8 #include <cmath>
     9 #define LL long long
    10 using namespace std;
    11 int n,d[21],ans[21],m,res;
    12 bool dfs(int cur,int add,int tot) {
    13     if(cur >= n) {
    14         if(add == res) {
    15             m = tot;
    16             return true;
    17         }
    18         return false;
    19     }
    20     if(dfs(cur+1,add,tot)) {
    21         return true;
    22     }
    23     if(dfs(cur+1,add+d[cur],tot+1)) {
    24         ans[tot] = d[cur];
    25         return true;
    26     }
    27     return false;
    28 }
    29 int main() {
    30     while(~scanf("%d %d",&n,&res)) {
    31         int i;
    32         for(int i = 0; i < n; i++)
    33             scanf("%d",d+i);
    34         if(dfs(0,0,0)) {
    35             puts("YES");
    36             for(i = 0; i+1 < m; i++)
    37                 printf("%d ",ans[i]);
    38             printf("%d
    ",ans[i]);
    39         } else puts("NO");
    40     }
    41     return 0;
    42 }
    View Code
     
  • 相关阅读:
    windows cmd 编码
    ARM伪指令
    System.load 和 System.loadLibrary
    用GDB调试程序
    ARM指令集
    ARM寻址方式
    abortion
    Oxford City Jealous Lover
    everyday words
    【转】高效率的C++函数返回值
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3852191.html
Copyright © 2011-2022 走看看