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[][][];
  18. Node a[], b[];
  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 = ;
  31. b0 = ;
  32. //scanf("%c", &ch);
  33. for(int i = ; 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 = , j = ;
  51. memset(f, INF, sizeof(f));
  52. f[][][A] = ;
  53. f[][][B] = ;
  54. int s, t;
  55. for(int i = ; i <= a0; i++){
  56. for(int j = ; j <= b0; j++){
  57. t = f[i][j][A] - ;
  58. s = f[i][j][A] - ;
  59. for(int k = j + ; k <= b0; k++){
  60. s = max(s + , b[k].x);
  61. t = max(t + , s + b[k].y);
  62. f[i][k][B] = min(f[i][k][B], t);
  63. }
  64. t = f[i][j][B] - ;
  65. s = f[i][j][B] - ;
  66. for(int k = i + ; k <= a0; k++){
  67. s = max(s + , a[k].x);
  68. t = max(t + , 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 ;
  76. }

POJ - 3846 Mountain Road 动归的更多相关文章

  1. Mountain Road

    题意: n个车,过一条路,有不同的方向,路上不允许同时有两个方向的车,给出每个车的起始时间,方向,和经过路花费的时间,车最小间隔10个时间,求最后一个车通过路的最早的时间. 分析: dp[i][j][ ...

  2. POJ 2110 Mountain Walking 二分+bfs

    传送门 昨天看到这个题还以为是个脑残的dp, 然而脑残的是我. 题目意思就是从左上角走到右下角, 设x为路径上的最大值-最小值, 求x的最小值. 二分x, 对于每一个x, 枚举下界lower, low ...

  3. uva 12222 Mountain Road

    题意: 有一个单行道,两个方向都有车在等待.给出每个车的方向以及到达的时间以及走完这段路所需要的时间. 为了防止车祸,同向两车通过任一点的时间间隔不得小于10s. 求最后一辆车离开时刻的最小值. 思路 ...

  4. POJ 1947 Rebuilding Road(树形DP)

    Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...

  5. 【POJ 3352】 Road Construction

    [题目链接] 点击打开链接 [算法] tarjan算法求边双联通分量 [代码] #include <algorithm> #include <bitset> #include ...

  6. {POJ}{动态规划}{题目列表}

    动态规划与贪心相关: {HDU}{4739}{Zhuge Liang's Mines}{压缩DP} 题意:给定20个点坐标,求最多有多少个不相交(点也不相交)的正方形 思路:背包问题,求出所有的正方形 ...

  7. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  8. XML Data Type Methods(一)

    XML Data Type Methods(一) /*XML Data Type Methods: 1.The query('XQuery') method retrieves(vt.检索,重新得到) ...

  9. gRPC 的route_guide例子

      本文的例子代码在: https://github.com/grpc/grpc-go/tree/master/examples/route_guide 功能就类似目前LBS一样,在每个位置上报一些文 ...

随机推荐

  1. centos7 bond0 双网卡配置

    [root@openldap ~]# ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500 ...

  2. Json相关内容

    一. 导入包:net.sf.json.JSONObject 代码 import net.sf.json.JSON; import net.sf.json.JSONArray; import net.s ...

  3. 疯狂软件对Oracle放弃Java EE的看法

    近日网络上出现了一些关于Oracle将要放弃Java EE的说法,在Java行业引起不小的关注,甚至有些人开始担心Java会不会就此消亡,但事实上这不过是杞人忧天,疯狂软件教学总监李刚根据多年来Jav ...

  4. Linux系统信息查看命令大全[转]

    系统 # uname -a               # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue   # 查看操作系统版本 # cat /proc/cpuinf ...

  5. CAS-ERR Cannot create a session after the response has been committed

    现象: 当cas 登录人数较少时候没有错误,但是用户过多时候出现下列err May-2016 18:09:11.932 SEVERE [http-nio-8080-exec-52] org.apach ...

  6. CorePlot学习六---点击scatterPlot中的symbol点时弹出对应的凝视

    因为项目须要用到用户点击 symbol时,弹出对应的具体信息,发现国内解说的比較少,经过一番搜索验证最终解决,先看效果图: 详细须要改动的代码例如以下: 首先要引用托付方法:CPTScatterPlo ...

  7. Google代码规范工具Cpplint的使用

    Cpplint是一个python脚本,Google使用它作为自己的C++代码规范检查工具. 假设你所在的公司也使用Google C++代码规范,那么你有必要了解下Cpplint. 以下说一下Cppli ...

  8. Vue源代码笔记(一)数据绑定

    VUE数据绑定介绍 数据绑定是vue的基础核心之一,本文以Vue对象(当然也包含VueComponent)里的data数据绑定为例,阐述整个绑定的过程. Vue的数据绑定由三部分组成, Observe ...

  9. 使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型

    from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...

  10. 45.angular路由设置

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 路由也可以通过不同的模板来实现. $routeProvider.when 函数的第一个参数 ...