比較经典的动态规划的题目了

一般动态规划的想法都是先推断是否有最优子结构,无后效性。接着从状态转移入手,尽量细分状态(即给定N得到N+1),完了再递推计算

难点:转移方程,其一般也难在怎样描写叙述一个结点

有时候不太好做就结合使用记忆化搜索(从大到小搜索,由于多个小的可能会组成一个大的导致无效计算过多)

/************************************************************************/
/*
动态规划三要素:
1.最优子结构 一个最优化策略的子策略总是最优的
2.无后效性 它曾经各阶段的状态无法直接影响它未来的决策,而仅仅能通过当前的这个状态
3.子问题重叠 动态规划将原来具有指数级时间复杂度的搜索算法改进成了具有多项式时间复杂度的算法 非常明显的状态转移
拆分的要素是时间,这里对于每一个电桩都是一个状态断点,这里加入上起点终点构成0.1.2...N+1种状态
对于某一个电桩,其最优化策略是 min(之前各个电桩最优状态下加上充电时间)
dp[i]=min(dp[j])+T;0<=j<i<=N+1 */
/************************************************************************/ #include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#define maxn 100+10 int L,C,T,N,VR,V1,V2,M,num;
float dp[maxn];
int charge[maxn];
int main()
{
int i,j,k;
float tmp,rabbit,TV1,ans;
while(scanf("%d%d%d%d%d%d%d",&L,&N,&C,&T,&VR,&V1,&V2)!=EOF)
{
for(i=1;i<=N;i++)
scanf("%d",charge+i);
dp[0]=-1*T;//刚開始不用充电
charge[0]=0;//补充充电桩
charge[N+1]=L;//补充充电桩
TV1=C/(V1+0.0);//计算骑在最大可行距离C下,电动车用时
rabbit=L/(VR+0.0);//计算兔子用时
for(i=1;i<=N+1;i++)
{
ans=1e9;//求dp[i]最小值
for(j=0;j<i;j++)
{
tmp=dp[j];
k=charge[i]-charge[j];
if(C<k)//推断可否一次性用电动车骑完
tmp+=TV1+(k-C+0.0)/V2;
else
tmp+=k/(V1+0.0);
ans=ans>tmp? tmp:ans;//求dp[i]最小值
}
dp[i]=ans+T; }
if(dp[N+1]<rabbit)
printf("What a pity rabbit!\n");
else
printf("Good job,rabbit!\n"); }
return 0;
}

每日一dp(2)——龟兔赛跑(hdu 2059)的更多相关文章

  1. hdu 2059 龟兔赛跑(动态规划DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2059 龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    M ...

  2. hdu 2059 龟兔赛跑(dp)

    龟兔赛跑 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...

  3. HDU 2059 龟兔赛跑(超级经典的线性DP,找合适的j,使得每个i的状态都是最好的)

    龟兔赛跑 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  4. hdu 2059:龟兔赛跑(动态规划 DP)

    龟兔赛跑 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  5. HDU - 2059 龟兔赛跑(多阶段决策dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2059 初始把起点和终点也算做充电站,设dp[i]是到第i个充电站的最短时间,那么dp[n+1]即是乌龟到达终点的 ...

  6. HDU 2059 龟兔赛跑 (dp)

    题目链接 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击--赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...

  7. hdu 2059 龟兔赛跑 (dp)

    /* 把起点和终点比作加油站,那总共同拥有n+2个加油站了, 每次都求出从第0个到第j个加油站(j<i)分别在加满油的情况下到第i个加油站的最短时间dp[i], 终于的dp[n+1]就是最优解了 ...

  8. HDU 2059 龟兔赛跑(动态规划)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 题解报告:hdu 2059 龟兔赛跑

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2059 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击—— ...

随机推荐

  1. RIAidea – Focus on Flash/Flex/AIR » About Me

    RIAidea – Focus on Flash/Flex/AIR » About Me Browse > Home > About Me Tuesday, May 20, 2014 | ...

  2. android scrollview 简单的使用

    以前写的Scrollview ,通常都是与Listview结合使用,不过因复杂可能新手不太懂,网上有许多文章,这里就不贴那个了DEMO了.  写了个简单的供大家参考:这样比较好理解(需要复杂的可以Q我 ...

  3. ExtJS+ASP.NET自己定义曲线

    第一步:创建Store数据源 var myData = []; myData.push({ 'name': '1', 'Oil_Production': '30', 'Water_Injection' ...

  4. UGUI实现的虚拟摇杆,可改变摇杆位置

    实现方式主要参考这篇文章:http://www.cnblogs.com/plateFace/p/4687896.html. 主要代码如下: using UnityEngine; using Syste ...

  5. 安装sql server 2008 management studio时,提示升级VS2008 到 SP1

    安装sql server 2008 management studio时,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Serve ...

  6. 【快速选择算法与nth_element函数】【续UVA11300 】

    在白书中提到了一种O(n)级别的寻找中位数算法 就是我们今天要介绍的主角 快速选择算法 类似快排 选择一个比较元素 进行递归处理寻找第k大元素 假设最后比较元素到了i 以下描述是我写快排的常用字符 所 ...

  7. Android一次退出所有Activity的方法(升级版)

    一.思路和方法: 首先创建一个ActivityManager类来存放Activity的对象. 返回ActivityManager的对象,供BaseActivity来进行操作. 所有其他子Activit ...

  8. 封装一些数据库SQLCipher的方法(增、删、改、查)

    上一篇随笔只是简单的说了一下使用SQLCipher框架,介绍的比较笼统,可能看一遍之后更加蒙圈了,为了更好的使用这个数据库,整理了我在公司项目的需要用的方法,包括创建表,插入数据,更新数据,搜索查询数 ...

  9. iOS中json解析出现的null,nil,NSNumber的问题

    在iOS开发过程中经常需要与服务器进行数据通讯,Json就是一种常用的高效简洁的数据格式. 问题现象 但是几个项目下来一直遇到一个坑爹的问题,程序在获取某些数据之后莫名崩溃.其实很早就发现了原因:由于 ...

  10. (jQuery||Zepto).extend 的一个小问题

    最近一直在搞移动端,也由于自己对jQuery比较熟悉,再加上Zepto提供了跟jQuery一样的API,所以就选择了Zepto作为开发框架. 由于是移动端开发,所以也应用了一些ES5新增的API,比如 ...