1. 程式人生 > >51nod1268 和為K的組合(DFS)

51nod1268 和為K的組合(DFS)

group () 關註 text lag int name 分享圖片 iostream

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
技術分享圖片 李陶冶 (題目提供者) 數據比較水,直接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)