题目链接

又是输出路径。。。这题完全受上题影响,感觉两个题差不多。。用了基本上一样的算法写了,这题比较纠结,就是卡内存啊。。。5000*5000的数组开不了。。然后没办法,水了好几次MLE,看了一下虎哥的思路,完全不是一个套路,我写复杂了。。我啪啪按他的思路来了一次,就是过不了第三组,貌似得交了一二十次了。。。我把5000*5000降了降,因为只要i<=j的时候有用,乱搞了搞,2500*5000就过了。。。真心不容易啊。。。

只要把flag[i][j]记录 那一段,然后 pre记录i,sz记录上一次的结尾,写的很麻烦。。。O(N^2)的复杂度。

  1. #include <cstring>
  2. #include <cstdio>
  3. #include <string>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <map>
  8. using namespace std;
  9. #define INF 100000000
  10. int flag[][];
  11. int dp[];
  12. int pre[];
  13. int sz[];
  14. struct node
  15. {
  16. int x,y;
  17. int ax,ay;
  18. }p[],s[];
  19. bool cmp(node a,node b)
  20. {
  21. if(a.ax == b.ax)
  22. return a.ay < b.ay;
  23. else
  24. return a.ax < b.ax;
  25. }
  26. int main()
  27. {
  28. int i,j,n,m,x,y,minz,key;
  29. scanf("%d",&m);
  30. for(n = ;; n ++)
  31. {
  32. scanf("%d%d",&x,&y);
  33. if(x == &&y == )
  34. break;
  35. p[n].x = x;
  36. p[n].y = y;
  37. if(p[n].x < )
  38. p[n].ax = ;
  39. else
  40. p[n].ax = p[n].x;
  41. if(p[n].y > m)
  42. p[n].ay = m;
  43. else
  44. p[n].ay = p[n].y;
  45. if(p[n].ax > p[n].ay) continue;
  46. if(p[n].ax > )
  47. flag[-p[n].ax][-p[n].ay] = n+;
  48. else
  49. flag[p[n].ax][p[n].ay] = n+;
  50. }
  51. for(i = ; i <= m; i ++)
  52. dp[i] = INF;
  53. for(i = ;i <= m;i ++)
  54. {
  55. if(flag[][i])
  56. {
  57. pre[i] = ;
  58. dp[i] = ;
  59. }
  60. }
  61. for(i = ; i <= m; i ++)
  62. {
  63. minz = INF;
  64. for(j = i - ; j >= ; j --)
  65. {
  66. if(minz > dp[j])
  67. {
  68. minz = dp[j];
  69. key = j;
  70. }
  71. int ti,tj;
  72. if(j > )
  73. {
  74. ti = - i;
  75. tj = - j;
  76. }
  77. else
  78. {
  79. ti = i;
  80. tj = j;
  81. }
  82. if(flag[tj][ti])
  83. {
  84. if(dp[i] > minz + )
  85. {
  86. pre[i] = j;
  87. sz[i] = key;
  88. dp[i] = minz + ;
  89. }
  90. }
  91. }
  92. }
  93. if(dp[m] == INF)
  94. printf("No solution\n");
  95. else
  96. {
  97. printf("%d\n",dp[m]);
  98. int num = ;
  99. while(m)
  100. {
  101. int ti,tj;
  102. if(pre[m] > )
  103. {
  104. ti = - pre[m];
  105. tj = - m;
  106. }
  107. else
  108. {
  109. ti = pre[m];
  110. tj = m;
  111. }
  112. s[num++] = p[flag[ti][tj] - ];
  113. m = sz[m];
  114. }
  115. sort(s,s+num,cmp);
  116. for(i = ; i < num; i ++)
  117. printf("%d %d\n",s[i].x,s[i].y);
  118. }
  119. }

URAL 1303. Minimal Coverage(DP)的更多相关文章

  1. 贪心 URAL 1303 Minimal Coverage

    题目传送门 /* 题意:最少需要多少条线段能覆盖[0, m]的长度 贪心:首先忽略被其他线段完全覆盖的线段,因为选取更长的更优 接着就是从p=0开始,以p点为标志,选取 (node[i].l < ...

  2. URAL 1303 Minimal Coverage

    URAL 1303 思路: dp+贪心,然后记录路径 mx[i]表示从i开始最大可以到的位置 sufmx[i]表从1-i的某个位置开始最大可以到达的位置 比普通的贪心效率要高很多 代码: #inclu ...

  3. ural 1303 Minimal Coverage【贪心】

    链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 http://acm.hust.edu.cn/vjudge/contest/view ...

  4. Ural 1303 Minimal Coverage(贪心)

    题目地址:Ural 1303 先按每一个线段的左端点排序,然后设置一个起点s.每次都从起点小于等于s的线段中找到一个右端点最大的. 并将该右端点作为新的起点s,然后继续找. 从左到右扫描一遍就可以. ...

  5. ural 1303 Minimal Coverage(贪心)

    链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 按照贪心的思想,每次找到覆盖要求区间左端点时,右端点最大的线段,然后把要求覆盖的区间 ...

  6. 【区间覆盖问题】uva 10020 - Minimal coverage

    可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...

  7. UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)

     Minimal coverage  The Problem Given several segments of line (int the X axis) with coordinates [Li, ...

  8. uva 10020 Minimal coverage 【贪心】+【区间全然覆盖】

    Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li,Ri ...

  9. UVA-10020 Minimal coverage(贪心)

    题目大意:在x轴上,给一些区间,求出能把[0,m]完全覆盖的最少区间个数及该情形下的各个区间. 题目分析:简单的区间覆盖问题.可以按这样一种策略进行下去:在所有区间起点.长度有序的前提下,对于当前起点 ...

随机推荐

  1. Extjs ComboBox 动态选中第一项

    有时候我们希望通过Store加载过来的数据,ComboBoxItem能够选择第一条数据作为默认数据,我们可以这么操作: var storeinfo = Ext.create('Ext.data.Sto ...

  2. SQL数据库约束

    针对维护数据库的完整性,关系型数据库SQL提供了数据约束来管理数据,常用的约束有:外键.唯一.主键. 主键约束:标识数据的唯一,便于数据查询索引: 唯一约束:保证数据的唯一性:常用语法 alter t ...

  3. 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】

    一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: ...

  4. android 入门-Eclipse 费解的问题

    1.第一次打开eclipse的时候 代码程序出好多红点.等待加载项目,如果加载完项目之后仍然存在,请重启eclipse. 2.如果你在创建页面中的button 的时候,设置了android:gravi ...

  5. Error: Could not find or load main class test.EditFile

    今天写了一个简单的小程序,运行之后发现Error: Could not find or load main class test.EditFile,项目无法启动.删除main中的所有内容之后依旧提示该 ...

  6. php代码效率测试

    对于一个被加载的页面,而遇到会卡的原因 ,代码量大,为了减少一句话分析,就采用分段式判断. 从php手册了解到,使用microtime函数,具体方法可参见php手册对这函数的用法 定义get_exec ...

  7. HDU 4513 吉哥系列故事——完美队形II (Manacher变形)

    题意:假设有n个人按顺序的身高分别是h[1], h[2] ... h[n],从中挑出一些人形成一个新的队形,新的队形若满足以下要求,则就是新的完美队形:  1.连续的 2.形成回文串 3.从左到中间那 ...

  8. JavaScript 之 document对象

    对象属性document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)do ...

  9. css用clearfix清除浮动

    本文从http://www.studyofnet.com/news/196.html复制.   本文导读:写css 时总为浮动而烦恼,如果用了浮动,浮动的父层不会跟着浮动框的高度增加而增加,在Fire ...

  10. Uva10328 dp(递推+高精度)

    题目链接:http://vjudge.net/contest/136499#problem/F 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 一个比较好理解的题解:原题中问 ...