HDU dp 2059 龟兔赛跑
来源:互联网 发布:分布式的文档数据库是 编辑:程序博客网 时间:2024/05/18 01:59
每次前面所有情况都要考虑
#include<iostream>#include<cstdio>#define MAX 1000000.0using namespace std;int main(){ int L; int n,c,t; int vr,vt1,vt2; int p[105]; float dp[105]; int i,j; while(scanf("%d",&L)!=EOF) { scanf("%d%d%d",&n,&c,&t); scanf("%d%d%d",&vr,&vt1,&vt2); p[0]=0; for(i=1;i<=n;i++) { scanf("%d",&p[i]); } p[n+1]=L; dp[0]=0.0; float time,MIN; //在起点的时候一定充电开始走 for(i=1;i<=n+1;i++) { dp[i]=MAX; for(j=0;j<i;j++) { int len=p[i]-p[j]; //从第j个充电点到第i个充电点的长度 if(len>=c) {time=1.0*c/vt1+1.0*(len-c)/vt2;} // 当两个充电点之间的长度大于充一次电所能走的长度时 else {time=1.0*len/vt1;} // 当两个充电点之间长度小于充一次电所能走的长度时 if(j) time+=t; //如果不是起点充电,那么就要加上充电时间 time+=dp[j]; //加上从起点到j点的最小时间 dp[i]=dp[i]<time?dp[i]:time; } } if(dp[n+1]<1.0*L/vr) printf("What a pity rabbit!\n"); else printf("Good job,rabbit!\n"); } return 0;}