[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;
}