被這個題虐的一塌糊塗啊,時間有兩個世紀那麼長
有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 表...