bzoj3174 Tjoi2013 拯救小矮人

2021-08-18 22:46:39 字數 1292 閱讀 9250

description

一群小矮人掉進了乙個很深的陷阱裡,由於太矮爬不上來,於是他們決定搭乙個人梯。即:乙個小矮人站在另一小矮人的 肩膀上,知道最頂端的小矮人伸直胳膊可以碰到陷阱口。對於每乙個小矮人,我們知道他從腳到肩膀的高度ai,並且他的胳膊長度為bi。陷阱深度為h。如果我 們利用矮人1,矮人2,矮人3,。。。矮人k搭乙個梯子,滿足a1+a2+a3+….+ak+bk>=h,那麼矮人k就可以離開陷阱逃跑了,一 旦乙個矮人逃跑了,他就不能再搭人梯了。

我們希望盡可能多的小矮人逃跑, 問最多可以使多少個小矮人逃跑。

input

第一行乙個整數n, 表示矮人的個數,接下來n行每一行兩個整數ai和bi,最後一行是h。(ai,bi,h<=10^5)

output

乙個整數表示對多可以逃跑多少小矮人

sample input

樣例12

20 10

5 5

30樣例2

2 20 10

5 5

35sample output

樣例1

2 樣例2

1hint

資料範圍

30%的資料 n<=200

100%的資料 n<=2000

首先如果在所有東西都確定好的情況下 考慮最上方的兩個矮人 如果都能出去交換 不影響 都不能出去 交換 不影響 有影響的僅僅在於交換之後可能乙個出不去了 那這種情況下 一定是臂展加身高最長的放在下面會更好 但是並不是所有情況都是這樣好 但是可以確定的是在滿足條件下這樣一定最好所以先這樣排序 然後去dp即可 設dp[i]表示走了i個矮人的最高距離 不能列舉走了幾個 而是應該列舉這一輪是誰走的避免算重

#include

#include

#include

using

namespace

std;

inline

char gc()

return *s++;

}inline

int read()

while(isdigit(ch)) x=x*10+ch-'0',ch=gc();

return x*f;

}const

int n=2020;

struct nodep[n];

inline

bool cmp(const node &a,const node &b)if (dp[j+1]) ans=max(ans,j+1);

}}printf("%d\n",ans);

return

0;}

bzoj3174 TJOI2013 拯救小矮人

time limit 1 sec memory limit 128 mb submit 573 solved 293 submit status discuss 一群小矮人掉進了乙個很深的陷阱裡,由於太矮爬不上來,於是他們決定搭乙個人梯。即 乙個小矮人站在另一小矮人的 肩膀上,知道最頂端的小矮人伸直...

bzoj3174 TJOI2013 解救小矮人

time limit 1 sec memory limit 128 mb submit 573 solved 293 submit status discuss 一群小矮人掉進了乙個非常深的陷阱裡,因為太矮爬不上來,於是他們決定搭乙個人梯。即 乙個小矮人站在還有一小矮人的 肩膀上。知道最頂端的小矮人...

BZOJ5334 Tjoi2018 數學計算

time limit 10 sec memory limit 256 mb submit 234 solved 155 小豆現在有乙個數x,初始值為1.小豆有q次操作,操作有兩種型別 1 m x x m 輸出 x mod 2 pos x x 第pos次操作所乘的數 保證第pos次操作一定為型別1,對...