facer今天買了n塊蛋糕,不料被資訊組中球球等好吃懶做的傢伙發現了,沒辦法,只好浪費一點來填他們的嘴巴。他答應給每個人留一口,然後量了量每個人口的大小。facer有把刀,可以切蛋糕,但他不能把兩塊蛋糕拼起來,但是他又不會給任何人兩塊蛋糕。現在問你,facer怎樣切蛋糕,才能滿足最多的人。(facer的刀很強,切的時候不會浪費蛋糕)。
輸入格式:
第一行n,facer有n個蛋糕。接下來n行,每行表示乙個蛋糕的大小。再一行乙個數m,為資訊組的人數,然後m行,每行乙個數,為乙個人嘴的大小。(1<=n<=50, 1<=m<=1024)
輸出格式:
一行,facer最多可以填多少張嘴巴。
輸入樣例#1:430
4050
2510
1516
1718
1920
2125
2430
輸出樣例#1:
7簡述一下題意:給出\(n\)塊蛋糕的大小和\(m\)個人要吃的量.現在只允許切蛋糕,求最多能滿足多少人的需求.
我們並不知道最終能滿足多少人,但是很顯然,肯定要優先滿足需求較小的人.所以可以現將每個人的需求排個序,這樣口的大小的陣列就是單調的了.既然是單調的,就可以用二分來確定最多能否滿足前mid個人.前mid個人能否滿足直接爆搜就可以了.
然而,這樣並過不了,因為資料範圍,這麼搞是肯定要tle的.所以我們可以考慮一下剪枝.
#includeusing namespace std;
const int n=50+5;
const int m=1024+5;
int n, m, ans = 0, waste = 0;
int cake[n], temp[n], sum = 0;
int mouth[m], pre[m];
bool dfs(int person,int pos,int mid)
else if(dfs(person-1,1,mid)) return true;
if(temp[i] < mouth[1]) waste -= temp[i];
temp[i] += mouth[person];
}return false;
}bool check(int mid)
int main()
printf("%d\n",ans);
return 0;
}
洛谷 P1714 切蛋糕
題目描述 今天是小z的生日,同學們為他帶來了一塊蛋糕。這塊蛋糕是乙個長方體,被用不同色彩分成了n個相同的小塊,每小塊都有對應的幸運值。小z作為壽星,自然希望吃到的第一塊蛋糕的幸運值總和最大,但小z最多又只能吃m小塊 m n 的蛋糕。吃東西自然就不想思考了,於是小z把這個任務扔給了學oi的你,請你幫他...
洛谷 P1714 切蛋糕 單調佇列
今天是小z的生日,同學們為他帶來了一塊蛋糕。這塊蛋糕是乙個長方體,被用不同色彩分成了n個相同的小塊,每小塊都有對應的幸運值。小z作為壽星,自然希望吃到的第一塊蛋糕的幸運值總和最大,但小z最多又只能吃m小塊 m n 的蛋糕。吃東西自然就不想思考了,於是小z把這個任務扔給了學oi的你,請你幫他從這n小塊...
洛谷P1714 切蛋糕 題解 單調佇列
題目大意 給你乙個大小為 n 的陣列,求滿足區間元素個數 le m 的連續子串行和的最大值。解題思路 假設陣列中第 i 個元素為 a i 我可以定義 sum i 表示前 i 個數之和 sum i sum i 1 a i 則,以 a i 結尾的最大連續子串行和為 sum i min sum j 我們可...