Hdu2059— 龟兔赛跑 动态规划
来源:互联网 发布:c语言的创始人 编辑:程序博客网 时间:2024/05/16 12:07
附原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2059
思路:
将起点和终点与加油站数目构成一个点集这样一共有n+2个点,用dp[i]表示到第i个点的最小耗费时间(题目即要求dp[n+1]的最小值)而dp[i]总是由两个部分组成:dp[j](j是小于i的任意一点)和t(j,i)(从第j个点满油状态行驶到第i个点的时间)那么状态转移方程为dp[i] = min(dp[j] + t(j, i));
Tips:
时间是浮点数,要小心前面路程和速度整数相除带来的陷阱。
#include<stdio.h>int p[102];//存储起点、终点和n个加油站构成的点集double dp[102];//存储乌龟到第i个的最短时间int main(){ int l,n,c,t,vr,vt1,vt2,i,j; double len,T_rabbit,T_tortoise,temp,min; while(~scanf("%d",&l)) { scanf("%d%d%d",&n,&c,&t); scanf("%d%d%d",&vr,&vt1,&vt2); dp[0]=p[0]=0; for(i=1;i<=n;i++) scanf("%d",&p[i]); p[i]=l; T_rabbit=l*1.0/vr; T_tortoise=0; for(i=1;i<=n+1;i++) { min=2147483647;//每次min赋最大数据初始化 for(j=0;j<i;j++) { len=p[i]-p[j]; temp=(c>=len)?dp[j]+len*1.0/vt1:dp[j]+(len-c)*1.0/vt2+c*1.0/vt1; if(j)//如果j不等于0,即不是从起点出发,要加上一次加满油的时间t temp+=t; if(min>temp) min=temp; } dp[i]=min; } T_tortoise=dp[n+1]; if(T_tortoise>T_rabbit) printf("Good job,rabbit!\n"); else printf("What a pity rabbit!\n"); } return 0;}
0 0
- Hdu2059— 龟兔赛跑 动态规划
- 动态规划 - hdu2059 - 龟兔赛跑
- HDU2059 龟兔赛跑 动态规划 DP
- HDU2059龟兔赛跑-题解动态规划DP
- hdu2059 龟兔赛跑(动态规划经典例题)
- hdu2059龟兔赛跑
- HDU2059 龟兔赛跑
- hdu2059(龟兔赛跑)
- hdu2059 龟兔赛跑
- hdu2059 龟兔赛跑
- hdu2059 龟兔赛跑
- HDU2059 龟兔赛跑
- HDU2059 龟兔赛跑
- hdu2059(龟兔赛跑)
- hdu2059龟兔赛跑
- hdu2059 龟兔赛跑
- HDU2059龟兔赛跑
- HDU2059龟兔赛跑
- solr3.6.2使用过程中过若干问题 记录
- 点滴记录C++
- 八个DOS命令
- 代理类
- Vim全图解释
- Hdu2059— 龟兔赛跑 动态规划
- 通过xml处理sql语句时对小于号与大于号的处理转换
- Python-Project Euler 50
- 泛型简单认识
- iOS知识
- 检查表空间是否符合以表空间传递的方式导出
- HTTP协议 (三) 压缩
- API函数IsDBCSLeadByte
- apache cxf之 一个简单的JAX-WS服务程序