問題描述 n個數 取其中部分之和能否構成k
dfs + 簡單剪枝
1 #include 2 #include 34using
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...