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;}

原创粉丝点击