hdu 2059 龟兔赛跑 水题

来源:互联网 发布:工业设计常用建模软件 编辑:程序博客网 时间:2024/04/30 15:41

这个题目题意有问题 怪不得我怎么做也a不了 到了一个充电站以后 电会自动清零 你有两个选择 充 或者不充 所以这个状态转移方程就巨简单了 dp[i]=min(dp[i],dp[j]+time);

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#include <iostream>#include <algorithm>#include <stack>#include <queue>#include <sstream>#include <ostream>#include <list>#include <ctype.h>#include <cmath>#define inf 2000000007using namespace std;double arr[300];int s[300];double min(double a,double b){    if(a<b) return a;    return b;}int main(){    double len;    while(scanf("%lf",&len)!=EOF)    {        memset(arr,0,sizeof(arr));        memset(s,0,sizeof(s));        int n,c;        double t;        double vr,vt1,vt2;        cin>>n>>c>>t>>vr>>vt1>>vt2;        for(int i=1;i<=n;i++)            cin>>s[i];        s[n+1]=len;arr[0]=0;        for(int i=1;i<=n+1;i++)        {            arr[i]=inf;            for(int j=0;j<i;j++)            {                int lenth=s[i]-s[j];                double time1=lenth*1.0/vt2;                double time2=0;                if(j) time2+=t;                if(c>=lenth) time2+=lenth*1.0/vt1;                else time2+=c/vt1+(lenth-c)/vt2;                double time=min(time1,time2);//这个地方的 time要用double 错了好几次才看出来;                arr[i]=min(arr[i],arr[j]+time);            }        }        //cout<<arr[n+1]<<endl;        if(arr[n+1]<(double)len/vr) cout<<"What a pity rabbit!"<<endl;        else cout<<"Good job,rabbit!"<<endl;    }    return 0;}


0 0
原创粉丝点击