码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2059

时间:2016-03-22 06:21:26      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

ps:终于解决了。。。。卡了我好久。最后用了DP。然后还有记忆化搜索优化了一下。终于AC了

思路:要计算dp[n](就是到第n个站的最短时间,也就是最优方案),必须知道dp[0]到dp[n-1]

设j是上一个站的充电,j从0开始循环,找出最优充电站,一直循环到n-1.然后取这里面的最小值.

代码:

#include "stdio.h"
#include "string.h"
int L,N,C,T,VR,VT1,VT2;
int p[110];
double dd[110];
double dp(int n){
    int i;
    if(n==0) return 0.0;
    if(dd[n]>0.0) return dd[n];
    int len;
    double time,min;
    min=100000000.0;
    for(i=0;i<n;i++){
        len=p[n]-p[i];
        if(len>=C){
            time=(double)(len-C)/VT2+(double)C/VT1;
        }
        else{
            time=(double)len/VT1;
        }
        if(i) time+=T;
        if(dp(i)+time<min){
            min=dp(i)+time;
        }
    }
    return dd[i]=min;
}
int main(){
    int i;
    double time2;
    while(~scanf("%d",&L)){
        scanf("%d%d%d",&N,&C,&T);
        scanf("%d%d%d",&VR,&VT1,&VT2);
        memset(dd,-1,sizeof(dd));
        for(i=1;i<=N;i++){
            scanf("%d",&p[i]);
        }
        p[0]=0;
        p[N+1]=L;
        time2=(double )L/VR;
        if(dp(N+1)>time2*1.0) printf("Good job,rabbit!\n");
        else printf("What a pity rabbit!\n");
    }
    return 0;
}

 

hdu 2059

标签:

原文地址:http://www.cnblogs.com/sureli/p/5304442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!