P1478 陶陶摘蘋果(公升級版)

2021-09-02 08:14:58 字數 2566 閱讀 2318

題目描述

又是一年秋季時,陶陶家的蘋果樹結了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:

8 15

20 130

120 3

150 2

110 7

180 1

50 8

200 0

140 3

120 2

輸出樣例#1:4說明

所有資料:n<=5000 a<=50 b<=200 s<=1000

xi<=280 yi<=100

方法一:dfs

#include

#include

#include

#include

using namespace std;

int n, s;

//蘋果數n,力氣s

int a, b;

//椅子高a,手伸直高b

int xi[

5005

], yi[

5005];

//蘋果高度xi,摘下所需力氣yi

int f[

5005][

1005];

//記憶化搜尋,注意要用二維陣列。

//同樣是判斷第i個蘋果時的已取數量f[i],剩餘體力s不一樣代表的f[i]也不一樣,所以不能用一維陣列

intdfs

(int i,

int s)

return f[i]

[s]=maxn;

//給f賦值並返回

}int

main()

cout <<

dfs(

1,s )

<< endl;

//從第乙個蘋果,剩餘體力為s時開始搜尋

//system("pause");

return0;

}

方法二:dp

#include

#include

#include

#include

using namespace std;

int n, s;

//蘋果數n,力氣s

int a, b;

//椅子高a,手伸直高b

int xi[

5005

], yi[

5005];

//蘋果高度xi,摘下所需力氣yi

int dp[

5005][

1005];

//代表面對第i個蘋果,力氣為j時已經取過的蘋果數

//動態轉移方程為dp[i][s]=max(dp[i][s],dp[i-1][s-yi[i]]+1);

intmain()

for(

int j =

0; j <= s; j++

)//列舉力氣為0到s每一種情況

for(

int i=

1;i<=n;i++

)//列舉每乙個蘋果

cout << dp[n]

[s]<< endl;

//輸出的是列舉過每乙個蘋果且力氣為s時的最終答案

//system("pause");

return0;

}

方法三:貪心(本題最優)

#include

#include

#include

#include

using namespace std;

int n, s;

//蘋果數n,力氣s

int a, b;

//椅子高a,手伸直高b

int cnt;

//計算能摘到的蘋果數

ap[5005];

intcmp

//過載sort函式,按照蘋果高度公升序排序

intmain()

sort

(ap +

1, ap + n +

1, cmp)

;//按照蘋果的高度從低到高排序

for(

int i =

1; i <= n; i++

)//遍歷從第乙個到第n個蘋果

} cout << cnt << endl;

//system("pause");

return0;

}

P1478 陶陶摘蘋果(公升級版)

大佬說要用貪心 0 1揹包 並沒看出來 其實是因為不知道那是什麼東西 又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,這次她有乙個a公分的椅子。當他手夠不著時,他會站到椅子上再試試。這次與noip2005普及組第一題不同的是 陶陶之前搬凳子,力氣只剩下s了。當然,每次摘蘋果時都要用一定...

P1478 陶陶摘蘋果 公升級版

又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,這次她有乙個a公分的椅子。當他手夠不著時,他會站到椅子上再試試。這次與noip2005普及組第一題不同的是 陶陶之前搬凳子,力氣只剩下s了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在s 0之前最多能摘到多少個蘋果。現在已知n個蘋果到...

P1478 陶陶摘蘋果(公升級版)

又是一年秋季時,陶陶家的蘋果樹結了n個果子。陶陶又跑去摘蘋果,這次她有乙個a公分的椅子。當他手夠不著時,他會站到椅子上再試試。這次與noip 2005普及組第一題不同的是 陶陶之前搬凳子,力氣只剩下s了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在s 0之前最多能摘到多少個蘋果。現在已知n個蘋果...