[刷題之旅]部分和問題

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