在一條水平路邊,有 nn 個釣魚湖,從左到右編號為 1,2,…,n1,2,…,n。佳佳有 hh 個小時的空餘時間,他希望利用這個時間釣到更多的魚。他從 11 出發,向右走,有選擇的在一些湖邊停留一定的時間(是 55 分鐘的倍數)釣魚。最後在某乙個湖邊結束釣魚。佳佳從第 ii 個湖到第 i+1i+1 個湖需要走 5\times t_i5×t
i分鐘路,還測出在第 ii 個湖停留,第乙個 55 分鐘可以釣到 f_if
i條魚,以後每再釣 55 分鐘,可以釣到的魚量減少 d_idi
,若減少後的魚量小於 00,則減少後的魚量為 00 。為了簡化問題,佳佳假定沒有其他人釣魚,也沒有其他因素影響他釣到期望數量的魚。請程式設計求出佳佳最多能釣魚的數量。
輸入第一行乙個整數 nn,表示湖的個數
第二行乙個整數 hh,表示佳佳的空閒時間
第三行有 nn 個整數,依次表示每個湖第乙個 55 分鐘能釣到魚的數量
第四行有 nn 個整數,依次表示以後的每5分鐘釣魚數量比前乙個 55 分鐘釣魚數量減少的數量
第五行有 n-1n−1 個整數,t_it
i表示由第 ii 個湖到第 i+1i+1 個湖需要花 5\times t_i5×ti
分鐘的路程
輸出輸出只有一行,表示佳佳最多能釣魚的數量
樣例輸入31
4 5 6
1 2 1
1 2樣例輸出
35提示
樣例解釋
在第 11個湖釣 15分鐘,共釣得 4+3+2=94+3+2=9 條魚;
在第 2 個湖釣 10分鐘,共釣得 5+3=85+3=8條魚;
在第 3個湖釣 20 分鐘,共釣得 6+5+4+3=18 ;
從第 1個湖到第 2 個湖,從第 2 個湖到第 3個湖,共用時間 15 分鐘,共得 35條魚,並且這是最多的數量。
資料範圍與提示
對於 100% 的資料,2≤n≤100,1≤h≤20。
解題思路: 剛開始一直被到底去**釣魚,要不要回頭,怎麼貪心所困惑. 後來想到 如果直接規定範圍 一定要去第i個湖掉一次魚,就可以直接省略掉考慮回頭的路程問題, 問題轉變為從1到i 個湖(時間減去到i個湖的時間) 然後進行貪心處理即可
附上**:
#include
#include
#include
using
namespace std;
int n,h;
int a[
1000
],b[
1000
],c[
1000];
int a1[
1000];
//用a1[i]儲存原始資料
intmain()
for(i=
1;i<=n;i++
) c[1]
=0;for
(i=2
;i<=n;i++
)for
(i=1
;i<=n;i++)if
(a[max]==0
)break
; sum+
=a[max]
; a[max]
-=b[max];if
(a[max]
<0)
h--;}
if(maxmax=sum;
h=h1;
//復原h
for(j=
1;j<=n;j++)}
cout
}
最簡單的NP Hard問題
本文介紹了最簡單的np hard問題 數字分割槽問題,以及該問題的乙個偽多項式解法和兩個近似解法。討論這樣乙個問題 給定乙個正整數的多重集合 能否將劃分為兩個子集和,使得中元素的和與中元素的和相等?在數論和電腦科學中,該問題被稱為是數字分割槽問題,儘管np完全,但是卻存在動態規劃的解法能夠在偽多項式...
C語言最簡單的幾個問題
c語言最簡單的幾個問題 這是我的第一篇部落格,主要講述了最近學習過程中遇到和解決的幾個程式設計問題。一 5位運動員參加了10公尺臺跳水比賽,有人讓他們 比賽結果 a選手說 b第二,我第三 b選手說 我第二,e第四 c選手說 我第一,d第二 d選手說 c最後,我第三 e選手說 我第四,a第一 比賽結束...
最簡單的C語言程式
一.基礎知識 1.程式 指令 執行的命令。2.注釋不是命令 綠色 是解釋。符號 內的是解釋內容,此符號為多行注釋。在程式右側若有 則說明從此處到本行結束是注釋,為單行注釋 3.藍色字型是c語言程式中自帶的關鍵字,關鍵字是c語言程式自身使用的,不可以作為變數或自定義名稱來使用。4.printf是c編譯...