【題目描述】
在一條水平路邊,有 n 個釣魚湖,從左到右編號為 1,2,…,n。佳佳有 h個小時的空餘時間,他希望利用這個時間釣到更多的魚。他從 1 出發,向右走,有選擇的在一些湖邊停留一定的時間(是 5 分鐘的倍數)釣魚。最後在某乙個湖邊結束釣魚。佳佳從第 i 個湖到第 i+1個湖需要走 5×ti分鐘路,還測出在第 i 個湖停留,第乙個 5 分鐘可以釣到 fi條魚,以後每再釣 5分鐘,可以釣到的魚量減少 di ,若減少後的魚量小於 0,則減少後的魚量為 0 。為了簡化問題,佳佳假定沒有其他人釣魚,也沒有其他因素影響他釣到期望數量的魚。請程式設計求出佳佳最多能釣魚的數量。
【輸入格式】
第一行乙個整數 n,表示湖的個數
第二行乙個整數 h,表示佳佳的空閒時間
第三行有 n 個整數,依次表示每個湖第乙個 5分鐘能釣到魚的數量
第四行有 n 個整數,依次表示以後的每5分鐘釣魚數量比前乙個 5 分鐘釣魚數量減少的數量
第五行有 n-1 個整數,ti 表示由第 i 個湖到第 i+1個湖需要花 5*ti分鐘的路程
【輸出格式】
輸出只有一行,表示佳佳最多能釣魚的數量。
【樣例輸入】31
4 5 6
1 2 1
1 2【樣例輸出】
35【樣例解釋】
在第 11個湖釣 15分鐘,共釣得 4+3+2=9條魚;
在第 2 個湖釣 10 分鐘,共釣得 5+3=8條魚;
在第 3 個湖釣 20 分鐘,共釣得 6+5+4+3=18 條魚;
從第 1 個湖到第 2 個湖,從第 2 個湖到第 3 個湖,共用時間 15 分鐘,共得 35 條魚,並且這是最多的數量。
【資料範圍與提示】
對於 100% 的資料,2≤n≤100,1≤h≤20。
【**一:dp】
#include
#include
#include
using namespace std;
inline int read(
)while
(c>=48&
& c<=57)
return x*f;
}int f[
110]
,d[110];
int s[
110]
,ss[
110]
;int dp[30]
[300];
//dp[i]
[j]表示第乙個湖到第i個湖用了j個單位時間,釣的最多魚
int main()
memset(dp,
0,sizeof(dp));
//初始化
int ans=0;
//記錄數量
for(int i=
1;i<=n;i++)
//n個湖
} ans=
max(ans,dp[i]
[h-ss[i]])
;//記錄每一次湖的答案
}printf(
"%d\n"
,ans)
;return0;
}
【貪心**】
#include
#include
#include
using namespace std;
inline int read(
)while
(c>=48&
& c<=57)
return x*f;
}int t[
110]
,f[110
],d[
110]
,a[110];
int main(
)int ans=0;
for(
int i=
1;i<=n;i++)
ans=
max(ans,
sum);}
printf(
"%d\n"
,ans)
;return0;
}
C 一本通 1 1 練習 3 線段
一本通題庫 1429 libreoj 10007 vjudge 在乙個數軸上有n nn條線段,現選取其中k kk條線段使得這k kk條線段兩兩沒有重合部分,問最大的k kk為多少?第一行為乙個正整數n nn,下面n nn行每行2 22個數字a ia i ai b ib i bi 描述每條線段。輸出檔...
一本通 1 1 練習 1 數列極差
題目傳送門 這題也是典型的貪心演算法題。對於這個問題 先通過例項來認識問題所描述的計算過程。令 n 3 取數列 3,5,7 可能有下面三種情況 3 5 1 7 1 113 3 7 1 5 1 111 5 7 1 3 1 109 由此可見先運算小資料的到的是最大值,先運算大資料得到的是最小值。故針對此...
一本通 1 1 練習 2 數列分段
題目link 首先對於乙個序列,從 a 1 l 都符合最佳序列,假設對於第 l 1 個數,它放到從 l 1 r 的區間是一種最優的方法,並且它也可以放在從 1 l 1 這裡,那麼根據貪心,它放到 1 l 1 的序列中是合法的,而且也是一種最優方案。因此,這道題只需要貪心 能將當前數往左放就往左放。1...