51Nod:1268 和為K的組合
阿新 • • 發佈:2019-01-01
基準時間限制: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
時間複雜度:O(2^n)
#include<bits/stdc++.h> using namespace std; const int maxn=1e6; int a[maxn]; int n,k; bool dfs(int i,int sum) { if(i==n) return sum==k; if(dfs(i+1,sum)) return true; if(dfs(i+1,sum+a[i])) return true; return false; } int main() { cin>>n>>k; for(int i=0;i<n;i++) cin>>a[i]; if(dfs(0,0)) cout<<"YES\n"; else cout<<"NO\n"; return 0; }