hdu2059

来源:互联网 发布:java中scanner用法案例 编辑:程序博客网 时间:2024/06/06 20:55

之前刷了会儿dp,看到这题,一开始想就是dp,后来想歪,头绪一直理不对,

然后就参考了网上的。


下面已AC

#include<cstdio>#include<cstring>using namespace std;#define MAX_N 100#define INF 100000000int L;int N, C, t;int  v1, v2, v3;int p[MAX_N + 5];double dp[MAX_N + 5];void solve(){    double t1 = L * 1.0 / v1;    double t2 = C * 1.0 / v2;    double mixn;    double T = 0;    int temp;    dp[0] = 0;    for(int i = 1; i <= N + 1; ++i){        mixn = INF;        for(int j = 0; j < i; ++j){            temp = p[i] - p[j];            if(temp > C){                T = t2 + 1.0 * (temp - C) / v3;            }else{                T = 1.0 * temp / v2;            }            T += dp[j];            if(j){                T += t;            }            if(mixn > T){                mixn = T;            }        }        dp[i] = mixn;    }    if(t1>dp[N + 1])        printf("What a pity rabbit!\n");    else        printf("Good job,rabbit!\n");}int main(){    while(scanf("%d", &L) == 1){        scanf("%d%d%d", &N, &C, &t);        scanf("%d%d%d", &v1, &v2, &v3);        for(int i = 1; i <= N; ++i){            scanf("%d", &p[i]);        }        p[0] = 0, p[N + 1] = L;        solve();    }    return 0;}



0 0