题目链接

题意:  某城市的地铁是线性的,有n(2≤n≤50)个车站,从左到右的编号为1~N.有M1辆列车从第一站开始往右开,还有M2辆列车从第n站开始往左开。在时刻0,Mario从第1站出发,目的是在时刻T(0≤T≤200)会见车站n的一个间谍。在车站等车容易被抓,所以她决定尽量躲在开动的火车上,让在车站等待的总时间尽量短。列车靠站停车时间忽略不计,且Mario身手敏捷,即使两辆方向不同的列车在同一时间靠站,Mario也能完成换乘。求最少等待时间

思路: 这是一道给出 固定终点的求最最短等待时间的题,1,首先时间是单向流逝的,是一个天然的序,2.可以把时间t,站 n,看做一个点,建图,下面代码中has[i][j][0] 是代表当时间为i,站为j时,看看是否有向右的车,has[][][1]  是看看是否有向左的车;3 因时间是一个天然的序,dp[i][j] 代表 当时间为i,站为j 时,要到达 时间为t,站为n,需要等待的最短时间;则采用逆推法,dp[t][n] 一定为0吧,逆推法一只到dp[0][1];(在刘汝佳老师的紫书上,讲的DAG 上的动态规划上 的 硬币问题也可以采用逆推法,把终点设为s,我的收藏中有终点为0的)

在这个状态转移的过程中,无非有三种决策

1 没有车,等上一分钟,看看下一分钟有没有车;

2 若有向右的车,搭载向右的车;

3 若有向左的车,搭载向左的车;

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define Max 210
#define INF 0x3f3f3f3fint time[60],has[Max][60][2];
int dp[Max][60];  // dp[i][j] 时间为i分,j站,到达时间t,n站的需要等的最小时间;
int n,t,M1,M2;void init()
{memset(has,0,sizeof(has));memset(dp,INF,sizeof(dp));
}int main()
{int i,j,k,num=1;while(~scanf("%d",&n)&&n){init();scanf("%d",&t);for(i=1;i<n;i++)scanf("%d",&time[i]);scanf("%d",&M1);for(i=1; i<=M1; i++)     //建图,时间t,站n,为一个坐标(t,n),has 数组是看看有没有开往相邻坐标的车,相邻坐标由站和站于站之间的时间决定; {                           //has[i][j][0] ,表示看看有没有开往右边的车,has[i][j][1],看看有没有开往左边的车; scanf("%d",&k);for(j=1;j<=n;j++){if(j==1) has[k][j][0] = 1;else {k = k + time[j-1];if(k>t) continue;has[k][j][0] = 1;}}}scanf("%d",&M2);for(i = 1; i <= M2; i ++){scanf("%d",&k);for(j = n;j >=1;j --){if(j==n) has[k][j][1] = 1;else{k = k + time[j];if(k>t) continue;has[k][j][1] = 1;}}}dp[t][n] = 0; // 逆推法,因为当时间为t,n站,到达时间为t,n站,需要的最小时间一定是0;// 随的时间减少,那么到时间t,n站的需要等的时间,会增加,也可能不变;//状态转移;  for(i = t - 1; i >= 0; i--){for(j = 1 ; j <= n; j++)    {dp[i][j] = dp[i+1][j] + 1; //等一分钟;如果等一分钟,就到了i+1分钟,j站,从i+1分钟,j站这个状态, if(j<n&&has[i][j][0]&&i+time[j]<=t)  //需要看i+1分,j站时,需要等车时间,在这个时间上再加1,就是dp[i][j],等一分钟的时间;{dp[i][j] = min(dp[i][j],dp[i+time[j]][j+1]); // 坐车时间不算,dp 数组中存的时间为在每一站等车的时间; }if(j>1&&has[i][j][1]&&i+time[j-1]<=t){dp[i][j] = min(dp[i][j],dp[i+time[j-1]][j-1]); }}}if(dp[0][1]>=INF)printf("Case Number %d: impossible\n",num++);else printf("Case Number %d: %d\n",num++,dp[0][1]);}return 0;
} 

UVa 1025 (DAG 上的动态规划,有固定终点的最短时间,逆推法)相关推荐

  1. 2014-11-20动态规划:顺推法与逆推法中递推公式的不同!

    1.动态规划的基本概念有哪些? 阶段.(阶段)状态.状态变量si.状态集Si.决策.决策变量ui(si).决策集Di(si).状态转移方程.决策的指标函数.策略的指标函数.最优值函数等. 2.什么是阶 ...

  2. 嵌套矩形——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 题目描述: 有n个矩形,每个矩形可以用 ...

  3. P3244 [HNOI2015]落忆枫音(DAG上的动态规划问题,朱刘定理,乘法逆元)

    P3244 [HNOI2015]落忆枫音 样例太坑了!竟然和题目描述给的图不一样! 题目描述 给定一张有向无环图,这张图满足一个性质:以点1为根节点,保证至少有一棵有向树,连接所有的节点. 现在向这张 ...

  4. UVA 1025 紫书练习题 动态规划

    好吧,做例题总是这样,莫名其妙的WA,然后莫名其妙的AC... 关键的部分紫书上已经说得很清楚了,剩下的就是确定has_train这个数组,我觉得确定这个数组也不是难事吧..把数据范围看清楚,然后看看 ...

  5. 信奥一本通-动态规划-例9.2-数字金字塔-方法四-逆推法代码实现

    #include<bits/stdc++.h> using namespace std;int main(){//x y分别为行列int x, y;//金字塔的高度int n;cin &g ...

  6. 20170814(三道题-DAG上DP 二分查找 map)

    题目 NYOJ_16 矩形嵌套 题意 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a 解决 DAG上的动态规划 1. 二元关系能够用图来建立 ...

  7. nyoj 16 矩形嵌套 (DAG上的DP)

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a< ...

  8. nyoj 10 skiing(DAG上的最长路,备忘录方法)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...

  9. 刘书dp学习笔记(1) 数字三角形与DAG上dp(上)

    我之前没怎么看过刘书,然后前几天看了一下dp,感觉dp观被刷新了- 终于明白为什么说刘书是神书了! 用[]括住的是在下的一些浅见与笔记. 顺便一提,在下不保证代码是能过评测的,因为只试了其中几个数据. ...

最新文章

  1. 派生类的拷贝构造【C++继承】
  2. kaggle (自杀分析)
  3. 一些python函数及其用法
  4. console java_Java Console format()方法与示例
  5. linux lcd显示流程,求助 armlinux中实现lcd显示
  6. 美国大学计算机专业排名2014,2014年美国大学计算机科学专业排名
  7. vscode插件推荐2020_2020年,前端开发者必备的10个VS Code扩展插件
  8. 网商微信实名认证FAQ
  9. maven解决依赖冲突
  10. java persistence,java-jpa(Java Persistence API)初识,
  11. 编程必备的最基本5种算法思想
  12. 联想从国有企业演变成民营集团揭秘(深度)
  13. 拜托,请给我贫寒简单的生活!
  14. ei计算机相关 小木从,怀念楼讲心那棵小木钩瞒
  15. Git使用技巧--详细教程
  16. 生信自学笔记(九)智慧的长者与多序列联配之clustal全局联配算法
  17. 【神器出炉】微信/QQ/TIM,如何查看对方撤回的消息?
  18. codeblocks的官网下载与安装
  19. 微信小程序给电商行业创业的新曙光
  20. 【牛客网】---多态经典选择题

热门文章

  1. 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(九)
  2. 英文论文写作摘要的时态和语态
  3. IE安全系列:IE的自我介绍 (II)
  4. ②号团队【扫黑除恶Team】-团队任务5:项目总结会
  5. 云解析旗舰版结合U8C(本地部署)应用设置
  6. 每日爬虫练习—爬PPT
  7. lisp倒入excel数据画图_将excel数据导入CAD画图的方法
  8. 2023英伟达显卡排名天梯图(已更新)
  9. 2022-2028年中国宠物罐头行业市场全景调查及投资策略研究报告
  10. Hive之Order,Sort,Cluster and Distribute By