魚塘釣魚題解(堆解決)

2021-10-08 08:10:41 字數 2290 閱讀 9217

這道題可以用 貪心 + 大根堆 來解決。

先把題目放上來。

描述

有n個魚塘排成一排(n<

100),每個魚塘中有一定數量的魚,例如:n=

5時,如下表:

魚塘編號 123

45每1分鐘能釣到的魚的數量(1.

.1000) 10

1420169

每1分鐘能釣魚數的減少量(1.

.100) 246

5354

4即:在第1個魚塘中釣魚第1分鐘內可釣到10條魚,第2分鐘內只能釣到8條魚,……,第5分鐘以後再也釣不到魚了。從第1個魚塘到第2個魚塘需要3分鐘,從第2個魚塘到第3個魚塘需要5分鐘,……

給出乙個截止時間t

(t<

1000

),設計乙個釣魚方案,從第1個魚塘出發,希望能釣到最多的魚。

假設能釣到魚的數量僅和已釣魚的次數有關,且每次釣魚的時間都是整數分鐘。

輸入格式

共5行,分別表示:

第1行為n;

第2行為第1分鐘各個魚塘能釣到的魚的數量,每個資料之間用一空格隔開;

第3行為每過1分鐘各個魚塘釣魚數的減少量,每個資料之間用一空格隔開;

第4行為當前魚塘到下乙個相鄰魚塘需要的時間;

第5行為截止時間t。

輸出格式

乙個整數(不超過2

^31−1),表示你的方案能釣到的最多的魚。

這道題我們可以先想一下貪心思路:

首先我們知道:

所以我們可以先列舉只走到魚池 k 而不去後面的魚池能釣到的最多的魚。我就在**上面講吧。

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

105;

struct nodeheap[maxn]

, a, len;

//定義乙個結構體,第乙個是釣到的魚的數量,第二個是魚池的編號

int t[maxn]

, f[maxn]

, d[maxn]

;//分別為從 i 魚池到 i + 1 魚池的時間,在 i 魚池最開始每分鐘能釣到的魚的數量,在 i 魚池每一分鐘減少的魚的數量

/*void maintain(int x, int len)

}*///這是乙個錯誤的維護大根堆的方式,至於**錯了,讀者可以自行嘗試查詢(我一開始是這樣寫的)

void

maintain

(int i,

int k)

else

break

;//如果現在的值本來就是優,那就可以直接跳出(看不懂建議先做兩道堆的模板題)

} heap[i]

= a;

//把他更新,此時的 heap[i] 與原來的 heap[i] 不同,可以自己思考

}int

main()

for(

int i =

1; i <= n; i++

)for

(int i =

1; i <= n -

1; i++

)int m, t1 =0;

//t1為已經用掉的時間

scanf

("%d"

,&m)

;//輸入

for(

int k =

1; k <= n; k++

)//初始化,更新資料,等會維護大根堆

for(

int i =

1; i <= k/

2; i++

)while

((time >0)

&&(heap[1]

.fish >0)

) max_ =

max(max_, ans)

;//更新最終答案

t1 +

= t[k]

;//走到那裡已經花的時間,累加

}printf

("%d"

, max_)

;//輸出

return0;

//完美結束

}

部落格就到這裡了,有什麼寫得不好的還請指出

最後,還是感謝拜讀!

魚塘釣魚(fishing)

給出乙個截止時間t t 1000 設計乙個釣魚方案,從第1個魚塘出發,希望能釣到最多的魚。假設能釣到魚的數量僅和已釣魚的次數有關,且每次釣魚的時間都是整數分鐘。輸入格式 輸入檔案共5行,分別表示 第1行為n 第2行為第1分鐘各個魚塘能釣到的魚的數量,每個資料之間用一空格隔開 第3行為每過1分鐘各個魚...

魚塘釣魚 fishing)

魚塘釣魚 fishing 時間限制 1000 ms 記憶體限制 65536 kb 提交數 71 通過數 42 題目描述 有n個魚塘排成一排 n 100 每個魚塘中有一定數量的魚,例如 n 5時,如下表 魚塘編號 每1分鐘能釣到的魚的數量 1.1000 每1分鐘能釣魚數的減少量 1.100 當前魚塘到...

魚塘釣魚 fishing)

時間限制 1000 ms 記憶體限制 65536 kb 提交數 149 通過數 81 三種做法 純貪心做法 堆維護dp 有n個魚塘排成一排 n 100 每個魚塘中有一定數量的魚,例如 n 5時,如下表 魚塘編號每1分鐘能釣到的魚的數量 1.1000 每1分鐘能釣魚數的減少量 1.100 當前魚塘到下...