程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Challenge-2.1.4 部分和問題

Challenge-2.1.4 部分和問題

編輯:C++入門知識

Challenge-2.1.4 部分和問題


部分和問題

描述
給定整數a1、a2、.......an,判斷是否可以從中選出若干數,使它們的和恰好為K。
輸入
首先,輸入n,表示數的個數。
接著一行n個數。

(1<=n<=20,保證不超int范圍)

下一行輸入k,表示數的和

輸出
如果和恰好可以為k,輸出“YES”,並按輸入順序依次輸出是由哪幾個數的和組成,否則“NO”
樣例輸入
4 
1 2 4 7
13
樣例輸出
YES


簡單的dfs


#include
using namespace std;
#define MAX_N 30
int a[MAX_N];
int n,k;


bool dfs(int i,int sum)//已經從前i項得到了和sum,然後對於 i 項之後的進行分支
{
if(i==n)return sum==k;//如果前n項都計算過了,則返回sum是否與k相等
if(dfs(i+1,sum))return true;//不加a[i]
if(dfs(i+1,sum+a[i]))return true;//加a[i]
return false;//是否加上a[i]都不能湊成k
}


int main()
{
cin>>n;
for(int i=0;i {
cin>>a[i];
}
cin>>k;
if(dfs(0,0))
cout<<"YES"< else
cout<<"NO"< return 0;
}




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved