[C++]部分和問題
部分和問題:
給定整數a1,a2,…,an判斷是否可以從中選出若干數,使他們的和恰好爲k
樣例1:
輸入:
n=4
a={1,2,4,7}
k=13
輸出:
Yes(13 = 2 + 4 + 7)
樣例2:
輸入:
n=4
a={1,2,4,7}
k=15
輸出:
No
解題思路:可用遞歸思想,通過dfs從a1開始決定每個數加還是不加,當加到最後一個數時候,再判斷是否等於k
#include<iostream>
using namespace std;
const int maxn = 100;
int n;
int nums[maxn];
int k;
int dfs(int i, int sum){
if(i == n) return sum == k;
if(dfs(i+1, sum)) return 1;
if(dfs(i+1, sum+nums[i])) return 1;
return 0;
}
int main(){
cin>>n;
for(int i = 0; i<n; i++){
cin>>nums[i];
}
cin>>k;
if(dfs(0, 0) == 1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}