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

一般动态规划的想法都是先推断是否有最优子结构,无后效性。接着从状态转移入手,尽量细分状态(即给定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. apache 日志中记录代理IP以及真实客户端IP

    vim /usr/local/apach2/conf/httpd.conf 默认情况下log日志格式为:LogFormat "%h %l %u %t \"%r\" %&g ...

  2. 多媒体封装格式----mkv

    Matroska 开源多媒体容器标准.MKV属于其中的一部分.Matroska常见的有.MKV视频格式.MKA音频格式..MKS字幕格式..MK3D files (stereoscopic/3D vi ...

  3. Visual Studio常用的快捷键

      每次在网上搜关于VS有哪些常用快捷键的时候,出来的永远是一串长的不能再长的列表,完全没体现出“常用”二字,每次看完前面几个就看不下去了,相信大家都 有这种感觉.其实我们平时用的真的只有很少的一部分 ...

  4. net 2.0使用ajax

    asp.net ajax中用到了几个dll文件,这些可以从网上下载.http://ajax.asp.net站点下可以找到相关的下载.这其中包括:System.Web.Extensions.dll.Sy ...

  5. PHP学习笔记十三【二维数组】

    <?php //二维数组 $arr=array(array(1,2,3),array(4,5,6)); $arr1[0]=array(12,34,65); $arr1[1]=array(34,6 ...

  6. 将json的时间格式转换成正常的时间格式

    /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) 可以用 1-2 个占位符 * ...

  7. android学习---屏幕旋转

    /** *问题:今天学习android访问Servlet,Servlet给返回一个xml格式的字符串,android得到数据后将其显示到一个TextView中,发现Activity得到数据显 * 示到 ...

  8. .Net中如何使用MySql连接池

    提供一份官方的译文.翻译也挺辛苦的!! 6.4 Using Connector/Net with Connection Pooling 6.4在Connector/Net中使用连接池 The Conn ...

  9. JavaScript实现div宽、高自动缓慢拉伸

    最近打算实现一个带有滤镜效果的地自动拉伸图片.发现使用css3浏览器兼容性得需要特别关注.这里我使用js实现了一个div边框自动拉伸和缩小.源码如下: <!DOCTYPE html>< ...

  10. Servlet Examples

    Servlet Examples Servlet Examples 1.Hello World output: code: 1.import java.io.*;2.import javax.serv ...