雙向DFS 送禮物

2021-10-03 11:41:10 字數 1094 閱讀 8216

達達幫翰翰給女生送禮物,翰翰一共準備了n個禮物,其中第i個禮物的重量是g[i]。

達達的力氣很大,他一次可以搬動重量之和不超過w的任意多個物品。

達達希望一次搬掉盡量重的一些物品,請你告訴達達在他的力氣範圍內一次效能搬動的最大重量是多少。

輸入格式

第一行兩個整數,分別代表w和n。

以後n行,每行乙個正整數表示g[i]。

輸出格式

僅乙個整數,表示達達在他的力氣範圍內一次效能搬動的最大重量。

資料範圍

1≤n≤461≤n≤46,

1≤w,g[i]≤231−11≤w,g[i]≤231−1

輸入樣例:

20 575

4181輸出樣例:

19

#include

#include

#include

using

namespace std;

const

int n =46;

typedef

long

long ll;

int n, m, k;

int w[n]

;int weights[

1<<25]

, cnt =1;

int ans;

void

dfs1

(int u,

int s)

dfs1

(u +

1, s);if

((ll)s + w[u]

<= m)

dfs1

(u +

1, s + w[u]);

}void

dfs2

(int u,

int s)

ans =

max(ans, s + weights[l]);

return;}

dfs2

(u +

1, s);if

((ll)s + w[u]

<= m)

dfs2

(u +

1, s + w[u]);

}int

main()

送禮物 雙向dfs

思路 dfs 先把a陣列排序,由大變小 dfs出前n 2 2 可以湊出的數,放到陣列s中 把s陣列去重排序,行成乙個單調遞增序列 再dfs剩下的數 可以組成的數,每組成乙個,二分找s陣列匹配的最大值 include includeusing namespace std typedef long lo...

2401 送禮物 雙向搜尋)

題目描述 作為懲罰,gy被遣送去幫助某神牛給女生送禮物 gy 貌似是個好差事 但是在gy看到禮物之後,他就不這麼認為了。某神牛有n個禮物,且異常沉重,但是gy的力氣也異常的大 b 他一次可以搬動重量和在w w 2 31 1 以下的任意多個物品。gy希望一次搬掉盡量重的一些物品,請你告訴他在他的力氣範...

送禮物 題解

這道題目是到毒瘤題。首先我們至少去l個,所以我們可以把小於l的用單調佇列直接求出。對取l r個。顯而易見的是左右兩端必分別是這個區間的最小值和最大值。我們可以用01分數規劃。不放令結果最後為ans,則有 a j ans j a i ans i ans k 所以我們就可以愉快地分數規劃啦。includ...