POJ 1042 貪心 DP 釣魚問題)

2022-08-09 02:57:10 字數 1436 閱讀 4414

被這個題虐的一塌糊塗啊,時間有兩個世紀那麼長

有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+1][j+k+ti[i]);

dp**:

#include

#include

#include

#include

#include

#include

#define max(a,b) a>b?a:b;

using

namespace std;

int ti[30],fi[30][400],di[30],dp[30][400];

int h ,n,i,j,k;

int main()

}memset(dp,-1,sizeof(dp));

dp[0][0]=0;

int sum,tt=0;

for(i=0;ifor(j=0;j<=h;j++)}}

int mark=1,max=0;

for(i=1;i<=n;i++)

sum=sum+fi[i][k+1];

}h=h-ti[i]-k;

max-=sum;//

開始漏了

}fi[1][0]=h;

for(i=1;i"

%d,

",fi[i][0]*5);

printf("

%d\n

",fi[i][0]*5);

printf("

number of fish expected: %d\n\n

",mmax);

}return

0;}

列舉+貪心 

執行速度竟然比dp快

**:

#include#include#include#includeusing namespace std;

int fi[30],gi[30],di[30],ti[30];

int time[30],time[30];

int main()

}if(gi[mark]>di[mark])

else

gi[mark]=0;

time[mark]++;

sum+=maxx;

h--;

}if(max}

for(i=1;iprintf("%d, ",time[i]*5);

printf("%d\n",time[i]*5);

printf("number of fish expected: %d\n\n",max);

}return 0;

}

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

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

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

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

poj 1042 貪心演算法

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