又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,這次她有乙個a公分的椅子。當他手夠不著時,他會站到椅子上再試試。
這次與noip2005普及組第一題不同的是:陶陶之前搬凳子,力氣只剩下s了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在s<0之前最多能摘到多少個蘋果。
現在已知n個蘋果到達地上的高度xi,椅子的高度a,陶陶手伸直的最大長度b,陶陶所剩的力氣s,陶陶摘乙個蘋果需要的力氣yi,求陶陶最多能摘到多少個蘋果。
輸入格式:
第1行:兩個數 蘋果數n,力氣s。
第2行:兩個數 椅子的高度a,陶陶手伸直的最大長度b。
第3行~第3+n-1行:每行兩個數 蘋果高度xi,摘這個蘋果需要的力氣yi。
輸出格式:
只有乙個整數,表示陶陶最多能摘到的蘋果數。
輸入樣例#1:
輸出樣例#1:
8 15
20 130
120 3
150 2
110 7
180 1
50 8
200 0
140 3
120 2
4說明
所有資料:n<=5000 a<=50 b<=200 s<=1000
xi<=280 yi<=100咳,首先由於前幾天剛剛學了什麼是「深度優先搜尋(dfs)」,看到這道題,我第一反應是:這個不就是用深度優先搜尋嗎?!把所有情況全部列舉出來,然後再在滿足條件的情況下選擇能摘到最多蘋果的情況,不就ac了嗎?!
自我感覺非常良好,還自以為很聰明。我還在輸入的時候就把摘不到的蘋果忽略了,以此來減少列舉情況,節約時間。
於是寫了這樣的**:
**
#include
void
dfs(
int s,
int num)
;5005
], book[
5005];
int max =
0, n, t =0;
intmain()
else
scanf
("%d"
,&xi);}
dfs(s,0)
;printf
("%d"
, max)
;return0;
}void
dfs(
int s,
int num)
for(i =
0; i < t; i++)}
return
;}
最後的結果當然ac了 ,好吧…tle了…感覺瞬間自己被自己打臉。
然後再次經過不斷思考發現,只要將可以摘到的蘋果用「快速排序」將要用的力氣從小到大排序出來,然後從最小的力氣一直累加,直到累加值》=淘淘擁有的力氣,這時候就可以得到摘到最多蘋果的值了。
ps.這時候要注意,蘋果為0的情況。和累加是大於力氣,還是等於力氣,這兩種不同情況的時候要對值做不同的處理。
所以最終獲得ac了!我果然是天才!
ac**
#include
void
quicksort
(int left,
int right)
;5005];
intmain()
else
scanf
("%d"
,&xi);}
if(n ==0)
quicksort(0
, t -1)
;for
(i =
0; i < t; i++
)else
if(sum > s)
}return0;
}void
quicksort
(int left,
int right)};
= temp;
quicksort
(left, i -1)
;quicksort
(i +
1, right)
;}
最後的體會是:做題不能想當然,要思考用最快的方法,而不是用自己感覺很厲害的方法。 洛谷P1478 陶陶摘蘋果(公升級版)
每當我心情不好的時候,我就會刷刷水題,誒呀真香,真尼瑪有成就感 又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,這次她有乙個a公分的椅子。當他手夠不著時,他會站到椅子上再試試。這次與noip2005普及組第一題不同的是 陶陶之前搬凳子,力氣只剩下s了。當然,每次摘蘋果時都要用一定的力氣...
P1478 陶陶摘蘋果(公升級版)洛谷
又是一年秋季時,陶陶家的蘋果樹結了 nn 個果子。陶陶又跑去摘蘋果,這次他有乙個 aa 公分的椅子。當他手夠不著時,他會站到椅子上再試試。這次與 noip2005 普及組第一題不同的是 陶陶之前搬凳子,力氣只剩下 ss 了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在 s 0s 0 之前最多能摘...
洛谷P1478 陶陶摘蘋果(公升級版)
乙隻鶸的刷題記錄 題目描述 又是一年秋季時,陶陶家的蘋果樹結了 nn 個果子。陶陶又跑去摘蘋果,這次他有乙個 aa 公分的椅子。當他手夠不著時,他會站到椅子上再試試。這次與 noip2005 普及組第一題不同的是 陶陶之前搬凳子,力氣只剩下 s 了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在 ...