c 貪心釣魚問題 最簡單的思路

2021-10-04 08:17:30 字數 1728 閱讀 9592

在一條水平路邊,有 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編譯...