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]完全覆盖的最少区间个数及该情形下的各个区间. 题目分析:简单的区间覆盖问题.可以按这样一种策略进行下去:在所有区间起点.长度有序的前提下,对于当前起点 ...
随机推荐
- Delphi操作XML简介
参考:http://www.delphifans.com/InfoView/Article_850.html Delphi 7支持对XML文档的操作,可以通过 TXMLDocument类来实现对XML ...
- float 的有效数字为七位是怎么得出来的
以下内容来自CSDN网友xian_wwq的回答(http://bbs.csdn.net/topics/390874239): float: 1bit(符号位) 8bits(指数位) 23bits( ...
- HDU5558 Alice's Classified Message(合肥区域赛 后缀数组)
当初合肥区域赛的题(现场赛改了数据范围就暴力过了),可惜当初后缀数组算法的名字都没听过,现在重做下. i从1到n - 1,每次枚举rank[i]附近的排名,并记录当起点小于i时的LCP(rank[i] ...
- 【leetcode】Sqrt(x)
题目描述: Implement int sqrt(int x). Compute and return the square root of x. 实现开根号,并且返回整数值(这个很重要,不是整数的话 ...
- 使用windows的远程桌面连接连接Ubuntu
想起来用笔记本连接一个windows server时只需要在远程桌面连接里面输入一下ip地址然后账号密码就可以了,十分简单.于是乎既然装了个Ubuntu当服务器使那么我就业来远程连接一下,由于wind ...
- C#中var和dynamic
var与dynamic这两个关键字,只是看起来很相似,仅此而已!var表示“变量的类型是在编译时决定的”,但是dynamic表 示“变量的类型是在运行时决定的”.因此,dynamic与var具有截然不 ...
- socket编程学习
socket: 也称作套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求. 常用的套接字API函数: 1.socket(): 函数原型为:int socket(int domain, int ...
- PE文件的执行顺序
当一个PE文件被执行时,PE装载器首先检查DOS MZ header里的PE header的偏移量.如果找到,则直接跳转到PE header的位置. 当PE装载器跳转到PE header后,第二步要做 ...
- SQLServer 维护脚本分享(04)服务器角色和数据库角色相关操作
/*------------------------------------------------------------------------------------ [服务器级别-服务器角色] ...
- Servlet请求头response应用简单案例
Servlet请求头response应用简单案例:访问AServlet重定向到BServlet,5秒后跳到CServlet,并显示图片: AServlet package cn.yzu; import ...