送禮物 雙向dfs

2021-09-26 02:00:17 字數 600 閱讀 8354

思路:dfs

先把a陣列排序,由大變小

dfs出前n/2+2 可以湊出的數,放到陣列s中

把s陣列去重排序,行成乙個單調遞增序列

再dfs剩下的數 可以組成的數,每組成乙個,二分找s陣列匹配的最大值

#include#includeusing namespace std;

typedef long long ll;

const int n=(1<<24)+1;

ll ans,n,m,a[n],s[n],n_2;

void find1(int val)//二分查詢

ans=max(ans,s[l]+val);//當前最大值與全域性最大值開始比較

}void dfs(int u,ll sum)

if(a[u]+sum<=m) dfs(u+1,sum+a[u]);

dfs(u+1,sum);

}void dfs2(int u,ll sum)

if(a[u]+sum<=m) dfs2(u+1,sum+a[u]);

dfs2(u+1,sum);

}int main()

雙向DFS 送禮物

達達幫翰翰給女生送禮物,翰翰一共準備了n個禮物,其中第i個禮物的重量是g i 達達的力氣很大,他一次可以搬動重量之和不超過w的任意多個物品。達達希望一次搬掉盡量重的一些物品,請你告訴達達在他的力氣範圍內一次效能搬動的最大重量是多少。輸入格式 第一行兩個整數,分別代表w和n。以後n行,每行乙個正整數表...

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...