POJ - 3846 Mountain Road

题意:n个人要过桥,有的人从左边来,有的人从右边来,给你他们到达桥一端的时间和过桥所需要的时间,要求相向而行的只能有一人,对于每一个点,不能在10s内有同向而行的人经过。

思路:f[i][j][A/B] 表示 从左边走了i个,从右边走了j个,最后一个是左边还是右边的最小时间。问你最后一辆车的到达时间最小是多少。

  对于每一个这样的状态,可以往后面一直推过了k辆反向的车所消耗的时间,只要把出发时间和到达时间的间距都压在10s以上就可以满足条件,不断的更新最优值就行了。

  我之前写的时候对于每一个状态只知道推相邻的状态,这样导致转移的代码特别冗杂,最终答案也没有对,而且还超时了,所以这题来讲还是很遗憾没写出来,想到了状态,只是转移的时候犯了错误,没能过掉。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #define LL long long
 6 #define INF 0x3f3f3f3f
 7 #define IN freopen("in.txt","r",stdin)
 8 #define OUT freopen("out.txt", "w", stdout)
 9 #define MAXN 100005
10 using namespace std;
11 #define A 0
12 #define B 1
13 struct Node{
14     int x, y, pos;
15 };
16 int n;
17 int f[205][205][2];
18 Node a[205], b[205];
19 int a0, b0;
20 int main()
21 {
22     //IN;
23     //OUT;
24     int T;
25     scanf("%d", &T);
26     while(T--){
27         scanf("%d\n", &n);
28         char ch;
29         int x, y;
30         a0 = 0;
31         b0 = 0;
32         //scanf("%c", &ch);
33         for(int i = 1; i <= n; i++){
34             scanf("%c", &ch);
35             scanf("%d%d\n", &x, &y);
36
37             if(ch == 'A'){
38                 a0++;
39                 a[a0].x = x;
40                 a[a0].y = y;
41                 a[a0].pos = i;
42             }
43             else{
44                 b0++;
45                 b[b0].x = x;
46                 b[b0].y = y;
47                 b[b0].pos = i;
48             }
49         }
50         int i = 0, j = 0;
51         memset(f, INF, sizeof(f));
52         f[0][0][A] = 0;
53         f[0][0][B] = 0;
54         int s, t;
55         for(int i = 0; i <= a0; i++){
56             for(int j = 0; j <= b0; j++){
57                 t = f[i][j][A] - 10;
58                 s = f[i][j][A] - 10;
59                 for(int k = j + 1; k <= b0; k++){
60                     s = max(s + 10, b[k].x);
61                     t = max(t + 10, s + b[k].y);
62                     f[i][k][B] = min(f[i][k][B], t);
63                 }
64                 t = f[i][j][B] - 10;
65                 s = f[i][j][B] - 10;
66                 for(int k = i + 1; k <= a0; k++){
67                     s = max(s + 10, a[k].x);
68                     t = max(t + 10, s + a[k].y);
69                     f[k][j][A] = min(f[k][j][A], t);
70                 }
71             }
72         }
73         printf("%d\n", min(f[a0][b0][A], f[a0][b0][B]));
74     }
75     return 0;
76 }

转载于:https://www.cnblogs.com/macinchang/p/4747946.html

POJ - 3846 Mountain Road 动归相关推荐

  1. 【POJ - 3352】Road Construction(Tarjan,边双连通分量)

    题干: It's almost summer time, and that means that it's almost summer construction time! This year, th ...

  2. poj 3352【Road Construction】

    狂晕,是我做题太少了吧?我竟然直接按输入输出的模式做题,即输出"Output for Sample Input 1",呜呜,WA了几次就是因为这个................. ...

  3. uva 12222——Mountain Road

    题意:有一个狭窄的山路,两辆车不能同时相向而行,并且同向的车的间隔不能小于10秒,给定一些车的起始时间,求最后一辆车离开的最短时间. 思路:递推,dp(i,j,k)表示A端过了i辆车,B端过了j辆车, ...

  4. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  5. go grpc 深入笔记

    为什么80%的码农都做不了架构师?>>>    grpc 深入 生命周期 grpc 的生命周期由4种请求的方式不同而不同:(详细查看router示例) 普通rpc: 客户端发送请求, ...

  6. python plt pyplot matplotlib绘图时形状异常

    问题 如图,绘制的饼图和条形图叠加了,但是又不彻底. 原因 绘制过程中我前面绘制了很多图,添加了很多参数,共同作用下导致此问题的出现. 解决 使用plt.close()关掉绘图重新绘制即可. prin ...

  7. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  8. A Game of Thrones(46)

    28.CATELYN(0) My lady, you ought cover your head," Ser Rodrik told her as their horses plodded ...

  9. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. SpringCloud(第 029 篇)配置客户端 ConfigClient 接入配置服务端
  2. 数据库跟尾过多的错误,能够的原因阐发及处置惩罚设备
  3. SAP Fiori Elements - How complex binding defined in XML view is parsed
  4. 计算机基础应用的培养活动记录,计算机应用基础综合实训
  5. 就算边框缩窄到极致也不用刘海屏?魅族16s最新渲染图曝光
  6. html静态化和动态页面,web动态页面静态化,伪静态
  7. 比较一下几款常用的SSH工具
  8. resin 系统日志_resin 日志
  9. 转基因,请你走出这片净土。!!!食用转基因的人,你们伤不起~有木有,有木有啊~!!!!!!!!!!!!!!!
  10. 无线充电宝效果怎么样,无线充电实用性大吗
  11. iOS开发脚踏实地学习day14-绘图
  12. 【JDM】弯道王子,最强马6,马自达Mazda 6 MPS
  13. 眼球摘除手术| 作为眼科医生最无奈的手术之一,它是如何进行的?
  14. java-net-php-python-jspm现代化社区去也管理系统计算机毕业设计程序
  15. EC2 Instance扩容EBS卷容量
  16. 赴美生子入境经验汇总
  17. 首届“攀升玩创嘉年华”端午江城噶事!
  18. Ulink2升级至V2.03
  19. 测量中的坐标与时间系统1.3(在大地测量学中)
  20. ubuntu16.04 下怎么挂载iso文件

热门文章

  1. python后端需要什么基础_python做后端好吗
  2. 高科技的计算机作文600字,神奇的电脑_600字
  3. 无线轮播android,Android无限轮播Banner的实现
  4. python演示验证图像叠加过程_Python叠加矩形框图层2种方法及效果代码实例
  5. 本地共享映射文件夹进行删除操作_从集群建立到航测建模CC(Smart3D)实用操作教程...
  6. Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务
  7. mysql大规模读写性能_十招搞定 MySQL 大规模数据库的性能和伸缩性优化
  8. linux下nand flash驱动工作原理,Linux下Nand Flash 驱动代码分析
  9. linux mysql 不稳定_Linux服务器mysql数据库自动停止的解决方法 | 很文博客
  10. js生日计算年龄_JS根据生日算年龄的方法