zoukankan      html  css  js  c++  java
  • 51nod 1268

    1268 和为K的组合 

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
     收藏
     关注
    给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:"Yes",否则输出"No"。
    Input
    第1行:2个数N, K, N为数组的长度, K为需要判断的和(2 <= N <= 20,1 <= K <= 10^9)
    第2 - N + 1行:每行1个数,对应数组的元素A[i] (1 <= A[i] <= 10^6)
    Output
    如果可以,输出:"Yes",否则输出"No"。
    Input示例
    5 13
    2
    4
    6
    8
    10
    Output示例
    No

    数量小,可以直接做,用一集合储存现在的和,每遍历一个数就让它和集合里的数都相加。当然,只有小于k的才放进集合里,这个可以少算一些。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a[22];
     4 int main() {
     5     int n, k;
     6     set<int> st[2];
     7     set<int> ::iterator it;
     8     cin >> n >> k;
     9     int last = 0;
    10     for(int i = 1; i <= n; i ++) cin >> a[i];
    11     for(int i = 1; i <= n; i ++) {
    12         last = 1 - last;
    13         it = st[1-last].begin();
    14         for(; it != st[1-last].end(); ++it) {
    15             if((*it)+a[i] < k) {
    16                 st[last].insert((*it)+a[i]);
    17             } else if((*it)+a[i] == k) return 0*printf("Yes
    ");
    18             st[last].insert((*it));
    19         }
    20         st[last].insert(a[i]);
    21     }
    22     if(st[last].count(k)) printf("Yes
    ");
    23     else printf("No
    ");
    24     return 0;
    25 }
  • 相关阅读:
    AOD.net
    C# Eval()和Bind()
    .Net使用微軟自帶的用戶驗證和登錄授權
    .Net面試4套
    .Net面試題
    MVC开发模式
    .Net自帶Ajax和GridView
    HTML系列(HTMl+CSS+JavaScript+Jquery)--un
    .Net母版页
    .NetDOM操作--un
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/8976704.html
Copyright © 2011-2022 走看看