URAL 1303. Minimal Coverage(DP)
又是输出路径。。。这题完全受上题影响,感觉两个题差不多。。用了基本上一样的算法写了,这题比较纠结,就是卡内存啊。。。5000*5000的数组开不了。。然后没办法,水了好几次MLE,看了一下虎哥的思路,完全不是一个套路,我写复杂了。。我啪啪按他的思路来了一次,就是过不了第三组,貌似得交了一二十次了。。。我把5000*5000降了降,因为只要i<=j的时候有用,乱搞了搞,2500*5000就过了。。。真心不容易啊。。。
只要把flag[i][j]记录 那一段,然后 pre记录i,sz记录上一次的结尾,写的很麻烦。。。O(N^2)的复杂度。
- #include <cstring>
- #include <cstdio>
- #include <string>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <map>
- using namespace std;
- #define INF 100000000
- int flag[][];
- int dp[];
- int pre[];
- int sz[];
- struct node
- {
- int x,y;
- int ax,ay;
- }p[],s[];
- bool cmp(node a,node b)
- {
- if(a.ax == b.ax)
- return a.ay < b.ay;
- else
- return a.ax < b.ax;
- }
- int main()
- {
- int i,j,n,m,x,y,minz,key;
- scanf("%d",&m);
- for(n = ;; n ++)
- {
- scanf("%d%d",&x,&y);
- if(x == &&y == )
- break;
- p[n].x = x;
- p[n].y = y;
- if(p[n].x < )
- p[n].ax = ;
- else
- p[n].ax = p[n].x;
- if(p[n].y > m)
- p[n].ay = m;
- else
- p[n].ay = p[n].y;
- if(p[n].ax > p[n].ay) continue;
- if(p[n].ax > )
- flag[-p[n].ax][-p[n].ay] = n+;
- else
- flag[p[n].ax][p[n].ay] = n+;
- }
- for(i = ; i <= m; i ++)
- dp[i] = INF;
- for(i = ;i <= m;i ++)
- {
- if(flag[][i])
- {
- pre[i] = ;
- dp[i] = ;
- }
- }
- for(i = ; i <= m; i ++)
- {
- minz = INF;
- for(j = i - ; j >= ; j --)
- {
- if(minz > dp[j])
- {
- minz = dp[j];
- key = j;
- }
- int ti,tj;
- if(j > )
- {
- ti = - i;
- tj = - j;
- }
- else
- {
- ti = i;
- tj = j;
- }
- if(flag[tj][ti])
- {
- if(dp[i] > minz + )
- {
- pre[i] = j;
- sz[i] = key;
- dp[i] = minz + ;
- }
- }
- }
- }
- if(dp[m] == INF)
- printf("No solution\n");
- else
- {
- printf("%d\n",dp[m]);
- int num = ;
- while(m)
- {
- int ti,tj;
- if(pre[m] > )
- {
- ti = - pre[m];
- tj = - m;
- }
- else
- {
- ti = pre[m];
- tj = m;
- }
- s[num++] = p[flag[ti][tj] - ];
- m = sz[m];
- }
- sort(s,s+num,cmp);
- for(i = ; i < num; i ++)
- printf("%d %d\n",s[i].x,s[i].y);
- }
- }
URAL 1303. Minimal Coverage(DP)的更多相关文章
- 贪心 URAL 1303 Minimal Coverage
题目传送门 /* 题意:最少需要多少条线段能覆盖[0, m]的长度 贪心:首先忽略被其他线段完全覆盖的线段,因为选取更长的更优 接着就是从p=0开始,以p点为标志,选取 (node[i].l < ...
- URAL 1303 Minimal Coverage
URAL 1303 思路: dp+贪心,然后记录路径 mx[i]表示从i开始最大可以到的位置 sufmx[i]表从1-i的某个位置开始最大可以到达的位置 比普通的贪心效率要高很多 代码: #inclu ...
- ural 1303 Minimal Coverage【贪心】
链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 http://acm.hust.edu.cn/vjudge/contest/view ...
- Ural 1303 Minimal Coverage(贪心)
题目地址:Ural 1303 先按每一个线段的左端点排序,然后设置一个起点s.每次都从起点小于等于s的线段中找到一个右端点最大的. 并将该右端点作为新的起点s,然后继续找. 从左到右扫描一遍就可以. ...
- ural 1303 Minimal Coverage(贪心)
链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 按照贪心的思想,每次找到覆盖要求区间左端点时,右端点最大的线段,然后把要求覆盖的区间 ...
- 【区间覆盖问题】uva 10020 - Minimal coverage
可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...
- UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)
Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li, ...
- uva 10020 Minimal coverage 【贪心】+【区间全然覆盖】
Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li,Ri ...
- UVA-10020 Minimal coverage(贪心)
题目大意:在x轴上,给一些区间,求出能把[0,m]完全覆盖的最少区间个数及该情形下的各个区间. 题目分析:简单的区间覆盖问题.可以按这样一种策略进行下去:在所有区间起点.长度有序的前提下,对于当前起点 ...
随机推荐
- Extjs ComboBox 动态选中第一项
有时候我们希望通过Store加载过来的数据,ComboBoxItem能够选择第一条数据作为默认数据,我们可以这么操作: var storeinfo = Ext.create('Ext.data.Sto ...
- SQL数据库约束
针对维护数据库的完整性,关系型数据库SQL提供了数据约束来管理数据,常用的约束有:外键.唯一.主键. 主键约束:标识数据的唯一,便于数据查询索引: 唯一约束:保证数据的唯一性:常用语法 alter t ...
- 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】
一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: ...
- android 入门-Eclipse 费解的问题
1.第一次打开eclipse的时候 代码程序出好多红点.等待加载项目,如果加载完项目之后仍然存在,请重启eclipse. 2.如果你在创建页面中的button 的时候,设置了android:gravi ...
- Error: Could not find or load main class test.EditFile
今天写了一个简单的小程序,运行之后发现Error: Could not find or load main class test.EditFile,项目无法启动.删除main中的所有内容之后依旧提示该 ...
- php代码效率测试
对于一个被加载的页面,而遇到会卡的原因 ,代码量大,为了减少一句话分析,就采用分段式判断. 从php手册了解到,使用microtime函数,具体方法可参见php手册对这函数的用法 定义get_exec ...
- HDU 4513 吉哥系列故事——完美队形II (Manacher变形)
题意:假设有n个人按顺序的身高分别是h[1], h[2] ... h[n],从中挑出一些人形成一个新的队形,新的队形若满足以下要求,则就是新的完美队形: 1.连续的 2.形成回文串 3.从左到中间那 ...
- JavaScript 之 document对象
对象属性document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)do ...
- css用clearfix清除浮动
本文从http://www.studyofnet.com/news/196.html复制. 本文导读:写css 时总为浮动而烦恼,如果用了浮动,浮动的父层不会跟着浮动框的高度增加而增加,在Fire ...
- Uva10328 dp(递推+高精度)
题目链接:http://vjudge.net/contest/136499#problem/F 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 一个比较好理解的题解:原题中问 ...