51nod1268 和為K的組合(DFS)
阿新 • • 發佈:2018-07-21
group () 關註 text lag int name 分享圖片 iostream
1268 和為K的組合
基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級算法題
收藏
關註
給出N個正整數組成的數組A,求能否從中選出若幹個,使他們的和為K。如果可以,輸出:"Yes",否則輸出"No"。
Input
Output示例
第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
No李陶冶 (題目提供者) 數據比較水,直接dfs
1 #include<iostream> 2 using namespace std; 3 long long int n,a[21],m; 4 int flag=0,v[21]={0}; 5 void dfs(long long int sum,int t) 6 { 7 //cout<<sum<<endl; 8 if(sum==m) 9 { 10 flag=1; 11 return; 12 }13 if(flag||sum>m||t>n) 14 return; 15 dfs(sum+a[t],t+1); 16 dfs(sum,t+1); 17 } 18 int main() 19 { 20 scanf("%lld%lld",&n,&m); 21 long long int sum=0; 22 for(int i=1;i<=n;i++) 23 { 24 scanf("%lld",&a[i]); 25 sum+=a[i]; 26 } 27 if(sum<m) 28 printf("No\n"); 29 else if(sum==m) 30 printf("Yes\n"); 31 else 32 { 33 flag=0; 34 dfs(0,1); 35 if(flag) 36 printf("Yes\n"); 37 else 38 printf("No\n"); 39 } 40 return 0; 41 }
51nod1268 和為K的組合(DFS)