題目描述
又是一年秋季時,陶陶家的蘋果樹結了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個蘋果...