洛谷P1528 切蛋糕

2022-02-27 09:02:25 字數 1278 閱讀 8728

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 我們可...