[刷题之旅]部分和问题

[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
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>nums[i];
    }
    cin>>k;
    if(dfs(0, 0) == 1)
        cout<<"Yes"<

你可能感兴趣的:(刷题之旅)