POJ 1042 解題報告

2021-05-22 02:15:46 字數 909 閱讀 6316

題目要求:一條路上有n個湖。john剛開始在第1個湖。他可在其中選擇若干湖來釣魚。每到達乙個湖,他或者直接走過去下乙個湖,或者停留釣魚。釣魚的時間必須為5分鐘的倍數

。已知第i個湖到第i+1個湖需行t[i]時間。每個湖內初始有魚的數目為f[i]。當在第i個湖釣魚時,每過5分鐘,該湖魚的數目以d[i]的速度在減少直到為0。問john如何選擇,能釣

到最多數量的魚。即求在每個湖停留多長時間以及最大的數量為多少。另外,john不必每個湖都要到。如果有多個解,john優先將時間花在編號較小的湖。john總共有h時間。

思路:可以選擇dp。除題目要求所提到的陣列外,還可設定以下資料結構:

1:b[i],表示從第1個湖到第i個湖所要花的時間。當然b[1]=0。其餘的可按公式b[i+1]=b[i]+t[i]遞推。

2:m[i][j],表示若分配j時間,從第i個湖第n個湖可捕到魚的最大數目。這裡n表示john能到達的最遠的湖。在計算b[i]的過程中,可算出。

3:p[i][j],記錄在第i個湖到第n個湖分配j時間時,若想捕到最大數目的魚,在第i湖所花的時間。

顯然m[1][h]即為所求。

先可給定m,p初始值。p[i][j]=j。即若第i個湖到第n個湖分配了j時間,將j時間全部花在第i個湖。根據f[i],d[i]可算出m[i][j]的初始值。

不難發現,有動態轉移方程:

1.若j<=t[i],m[i][j]=m[i][j],p[i][j]=j。(j時間尚不足以從i湖到i+1湖,只有全花在第i湖)

2.若j>t[i],m[i][j]=max,0<=k1;i--),for(j=h-b[i];j>t[i];j--),for(k1=j-t[i]-1,k2=1;k1>=0;k1--,k2++)。求出m[i][j]和p[i][j](1=0;k1--,k2++)算出m[1][h]和p[1][h]。最後根據p[i][j]回溯,即可算出在各個湖所花的時間。

poj 1042 貪心演算法

poj 1042 gone fishing 題目要求 由有n個湖,按照順序排列,乙個人從第乙個湖向最後乙個湖行進 方向只能從湖0到湖n 1 途中可以在湖中釣魚。在每個湖中釣魚時,開始的5分鐘內可以釣到 f i 條,之後每5分鐘釣到的魚數目遞減 d i 且每兩個相鄰的湖的距離 t i 給出 t i 表...

POJ 1042 貪心 DP 釣魚問題)

被這個題虐的一塌糊塗啊,時間有兩個世紀那麼長 有dp和貪心兩種解法 下面dp 狀態轉移方程 dp i j max dp i j dp i 1 j ti i k 但是因為memset dp,1,sizeof dp 所以寫的時候是 dp i 1 j k ti i max dp i j sum,dp i ...

POJ 1042 釣魚問題 貪心列舉及動態規劃

題意描述 john現有h個小時的空閒時間,他打算去釣魚。john釣魚的地方共有n個湖,所有的湖沿著一條單向路順序排列 john每在乙個湖釣完魚後,他只能走到下乙個湖繼續釣 john必須從1號湖開始釣起,但是他可以在任何乙個湖結束他此次釣魚的行程。john在每個湖中每5分鐘釣的魚數 此題中以5分鐘作為...