zoukankan      html  css  js  c++  java
  • HDU 2059 龟兔赛跑

    受上一道题影响,我本来想着开一个二维数组来表示充电和不充电的状态。

    可这样就有一个问题,如果没有充电,那么在下一个阶段就有剩余的电量。

    这样问题貌似就不可解了,难道是因为不满足动态规划的无后效性这一条件?

    这里先打个问号。

    所以这题还是看的别人的思路。

    将起点和终点划分到N个加电站中去

    这样一共有N+2点,用DP[i]表示到第i个加电站的最小耗费时间

    那么在求DP[i]的时候,DP[0]...DP[i-1]已经求得

    让j从0遍历到i-1,每一个j表示最后一次充电到i点

    那么状态转移方程为

    DP[i] = min(DP[j] + t(j, i)) //t(j, i)表示从j充完电一直到i点(中途没有充过电)

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 double p[150];
     8 double dp[150];
     9 
    10 int main(void)
    11 {
    12     #ifdef LOCAL
    13         freopen("2059in.txt", "r", stdin);
    14     #endif
    15     int l;
    16     while(scanf("%d", &l) != EOF)
    17     {
    18         int i, j;
    19         int n, c, t;
    20         double vr, vt1, vt2;
    21         double temp;
    22         memset(dp, 0, sizeof(dp));
    23         memset(p, 0, sizeof(p));
    24         
    25         scanf("%d%d%d", &n, &c, &t);
    26         scanf("%lf%lf%lf", &vr, &vt1, &vt2);
    27         for(i = 1; i <= n; ++i)
    28         {
    29             scanf("%lf", &p[i]);
    30         }
    31         p[0] = 0;
    32         p[n + 1] = l;
    33         dp[0] = 0;
    34 
    35         for(i = 1; i <= n + 1; ++i)
    36         {
    37             dp[i] = 10000000;
    38             for(j = 0; j < i; ++j)
    39             {
    40                 double lenth = p[i] - p[j];
    41                 if(c >= lenth)
    42                     temp = dp[j] + lenth / vt1;
    43                 else
    44                     temp = dp[j] + c / vt1 + (lenth - c) / vt2;
    45                 if(j > 0)
    46                     temp += t;
    47                 if(temp < dp[i])
    48                     dp[i] = temp;
    49             }
    50         }
    51 
    52         if(dp[n + 1] < (l / vr))
    53             printf("What a pity rabbit!
    ");
    54         else
    55             printf("Good job,rabbit!
    ");
    56     }
    57     return 0;
    58 }
    代码君
  • 相关阅读:
    二维树状数组(模板)
    3033太鼓达人
    2503相框
    Ant Trip(画几笔)
    [ZJOI2004]嗅探器
    [USACO06JAN]冗余路径Redundant Paths(缩点)
    P3806 【模板】点分治1
    P4149 [IOI2011]Race
    P2634 [国家集训队]聪聪可可
    P4178 Tree
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3831364.html
Copyright © 2011-2022 走看看