[刷题之旅]部分和问题

[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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章