思路: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...