回溯法求解部分和問題

2021-10-06 07:58:34 字數 927 閱讀 7902

題目內容

給出n個正整數組成的陣列a,求能否從中選出若干個,使他們的和為k。如果可以,輸出:「yes」,否則輸出"no"。

輸入格式:

第1行:2個數n、k, n為陣列的長度, k為需要判斷的和(2 ≤n ≤ 20,1 ≤ k ≤ 10^9)

第2 到第 n + 1行:每行1個數,對應陣列的元素a[i] (1 ≤ a[i]≤ 10^6)

輸出格式:

如果可以,輸出:「yes」,否則輸出"no"。

樣例輸入

4 1312

47樣例輸出

yes輸入樣例:

5 9123

45輸出樣例:

yes

#include

using

namespace std;

#define max 20

//陣列長度

int len;

//所要求的和

int sumk;

//陣列

int a[max]

;bool

backsearch

(int i,

int sum)

bool fla =

backsearch

(i+1

,sum);if

(fla)

fla =

backsearch

(i+1

, sum+a[i]);

if(fla)

return

false;}

void

solve()

else

}int

main()

solve()

;system

("pause");

return0;

}

nyoj ACM 部分和問題 DFS 回溯 遞迴

部分和問題 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出 如果和恰好可以為k,輸出 yes 並...

部分和問題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入順序依次...

部分和問題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入順序依次...