原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2059
100 3 20 5 5 8 2 10 40 60 100 3 60 5 5 8 2 10 40 60
Good job,rabbit! What a pity rabbit!
题意:略。
题解:平时没做过什么DP的题,竟也没看出这是DP的题。 开始模拟做,WA,后来搜索(明显作死啊)TLE。最后还是得参考别人的代码。 状态转移方程: DP[i]=Min(DP[j]+t(j,i));
AC代码:
#include<iostream>
#include<cstring>
#define maxn 105
#define inf 0xffffffff
using namespace std;
double dp[maxn],p[maxn],v,v1,v2,c,t,L;
int n;
int main()
{
while(cin>>L)
{
memset(dp,0,sizeof(dp));
memset(p,0,sizeof(p));
cin>>n>>c>>t>>v>>v1>>v2;
for(int i=1;i<=n;i++)cin>>p[i];
p[n+1]=L;
for(int i=1;i<=n+1;i++){
double temp=inf;
for(int j=0;j<i;j++){
double dis=p[i]-p[j];
double time=dis>c ? (dis-c)/v2+c/v1:dis/v1;
time+=dp[j];
if(j)time+=t;
temp=min(temp,time);
}
dp[i]=temp;
}
if(L/v<dp[n+1])cout<<"Good job,rabbit!"<<endl;
else cout<<"What a pity rabbit!"<<endl;
}
return 0;
}
原文:http://blog.csdn.net/mummyding/article/details/43342687