標題:部分和問題
給定整數a1,a2,…,an,判斷是否可以從中選出若干數,使他們的和爲k。
限制條件:
1<=n<=20
-1000000000<=ai<=100000000
-1000000000<=k<=100000000
輸入:
n=4
a={1,2,4,7}
k=13
輸出:
yes(13=2+4+7)
輸入:
n=4
a=(1, 2,4,7)
k=15
輸出:
no
代碼:
#include <iostream>
#define MAX 20
using namespace std;
int a[MAX];
int n,k;
bool dfs(int i,int sum){
//如果前n項都計算過了,則返回sum是否與k相等
if(i==n){
return sum==k;
}
//不加上a[i]的情況
if(dfs(i+1,sum)){
return true;
}
//加上a[i]的情況
if(dfs(i+1,sum+a[i])){
return true;
}
//無論是否加上a[i]都不能湊成k,則返回false
return false;
}
int main(){
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i];
}
cin>>k;
if(dfs(0,0)){
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
return 0;
}