部分和問題

2022-08-20 23:51:14 字數 670 閱讀 5051

問題描述 n個數 取其中部分之和能否構成k

dfs + 簡單剪枝

1 #include 2 #include 3

4using

namespace

std;

56 typedef long

long

ll;78//

每乙個數要麼選要麼不選 所以複雜度是o(2^n)9//

還能剪枝 因為當sum超過k時 狀態無論如何轉移都無法成功

10 ll a[128

];11

ll k;

12int

n;13

bool dfs(int

t, ll s)

1419

//剪枝

20if (s > k) return

false;21

if (t == n) return

false;22

return ( dfs(t+1, s+a[t]) || dfs(t+1

, s) );23}

24int

main()

2532 cin >>k;

33if ( dfs(0, 0) )cout << "

yes"

<34else cout << "no"

<35 }

部分和問題

時間限制 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 並按輸入順序依次...

部分和問題

給定n 個整數ai 求是否可選出若干個數,使它們的和恰好為k n 20 example 1 n 4 a k 13 include include using namespace std intn,k,a 22 suit 22 num 0 stack int p bool dfs inti,intsu...