zoukankan      html  css  js  c++  java
  • nyoj 1282 部分和问题

    部分和问题(入门题)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:0
     
    描述

    给你n个数(a1,a2,a3.......an) ,是否存在某一些数字加起来等于k,有就输出 "YES",否则输出 "NO"。

    数据范围:n<20;

    a1+a2+....an在int范围里面.

     
    输入
    多组输入
    每组第一行输入两个数n,k
    第二行输入n个数a1 a2 ...... an
    输出
    如果存在一些数加起来为k输出"YES";否则输出"NO".
    样例输入
    5 6
    2 3 5 2 1
    3 6
    2 3 9
    样例输出
    YES
    NO
     1 #include <cstdio>
     2 #include <cstdlib>
     3 
     4 int n,k;
     5 int a[30];
     6 
     7 bool dfs(int t, int sum) {
     8     if(t == n) {
     9         return sum == k;
    10     }
    11     else {
    12         if(dfs(t+1, sum)) {
    13             return true;
    14         }
    15         else {
    16             return dfs(t+1,sum+a[t]);
    17         }
    18     }
    19 }
    20 int main(int argc, char const *argv[])
    21 {
    22     while(scanf("%d",&n) != EOF) {
    23         scanf("%d",&k);
    24         for(int i =0; i < n; i++) {
    25             scanf("%d",&a[i]);
    26         }
    27         
    28         if(dfs(0,0)) {
    29             puts("YES");
    30         }
    31         else {
    32             puts("NO");
    33         }
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    图论初步
    分块和块状链表
    线段树入门
    ST表与树状数组
    [luogu P1312]Mayan游戏
    [luoguP4139]上帝与集合的正确用法


    电解质
    无机盐
  • 原文地址:https://www.cnblogs.com/jasonJie/p/6084003.html
Copyright © 2011-2022 走看看