正题

题目链接:https://www.luogu.com.cn/problem/CF39C


题目大意

坐标轴上有\(n\)个圆,给出每个圆的位置\(c_i\)和半径\(r_i\)。

要求选出最多的圆使得他们不相交,求方案。

\(1\leq n\leq 2000\)


解题思路

转换为选出最多的不交区间,然后离散一下,按照区间长度排序。

设\(f_{i,j}\)表示区间\(i\)内最右边的圆边界是\(r\)时的最多数量。

然后转移就可以了。

时间复杂度\(O(n^2)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=2100,inf=2147483647;
int n,l[N],r[N],f[N][N<<1],fr[N][N<<1];
int cnt,p[N],b[N<<1];
vector<int> q[N<<1];
bool cmp(int x,int y)
{return (long long)r[x]-l[x]<=(long long)r[y]-l[y];}
void print(int x,int r){
if(r<l[x])return;
if(fr[x][r]){
printf("%d ",fr[x][r]);
print(fr[x][r],r);
print(x,l[fr[x][r]]);
}
else print(x,r-1);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
int c,R;
scanf("%d%d",&c,&R);
l[i]=c-R;r[i]=c+R;p[i]=i;
b[++cnt]=c-R;b[++cnt]=c+R;
}
l[++n]=-inf;r[n]=inf;p[n]=n;
b[++cnt]=-inf;b[++cnt]=inf;
sort(b+1,b+1+cnt);
cnt=unique(b+1,b+1+cnt)-b-1;
sort(p+1,p+1+n,cmp);
for(int xx=1;xx<=n;xx++){
int x=p[xx];
l[x]=lower_bound(b+1,b+1+cnt,l[x])-b;
r[x]=lower_bound(b+1,b+1+cnt,r[x])-b;
f[x][l[x]]=1;
for(int i=l[x]+1;i<=r[x];i++){
f[x][i]=f[x][i-1];
for(int j=0;j<q[i].size();j++){
int y=q[i][j];
if(l[y]<l[x])continue;
if(f[x][l[y]]+f[y][r[y]]>f[x][i])
f[x][i]=f[x][l[y]]+f[y][r[y]],fr[x][i]=y;
}
}
q[r[x]].push_back(x);
}
printf("%d\n",f[n][r[n]]-1);
print(n,r[n]);
return 0;
}

CF39C-Moon Craters【dp】的更多相关文章

  1. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  2. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  3. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  4. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  5. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  6. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  7. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

  8. HackerRank - common-child【DP】

    HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...

  9. LeetCode:零钱兑换【322】【DP】

    LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...

随机推荐

  1. SynchronizedMap和ConcurrentHashMap有什么区别

    SynchronizedMap实现上在调用Map的所有方法是,对整个map进行了同步! public V put(K key, V value) { synchronized (mutex) {ret ...

  2. C++11 unique_ptr智能指针详解

    在<C++11 shared_ptr智能指针>的基础上,本节继续讲解 C++11 标准提供的另一种智能指针,即 unique_ptr 智能指针. 作为智能指针的一种,unique_ptr ...

  3. LeetCoded第242题题解--java--数组

    数组 数组的优点在于: 构建非常简单 能在 O(1) 的时间里根据数组的下标(index)查询某个元素(连续内存+对象指向数组下标0位置+index能够直接找到元素) 而数组的缺点在于: 构建时必须分 ...

  4. 一、web请求

    BS架构(Browser/Server) 客户端使用统一的浏览器(Browser) 服务端(Server)基于统一的HTTP协议 流程:用户浏览器输入URL地址–>DNS域名解析出IP地址–&g ...

  5. jQuery中的样式(七):addClass()、removeClass()、toggleClass()、hasClass()、css()、width()、height()等

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. Fllink学习

    1.Apache Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处 ...

  7. Git(GitHub)配合TortoiseGit使用

    1.首先下载安装配置Git 安装请参照 https://www.cnblogs.com/xueweisuoyong/p/11914045.html 配置请参照 https://www.jianshu. ...

  8. super的两个作用

    super与实例没有什么关系,它本身有两个作用的,参考如下理解: 1.super可以当函数用.super作为函数调用时,表示父类的构造函数.示例: class Par { constructor() ...

  9. js与jquery获取input输入框中的值

    如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML 一.jquery获取input文本框中的值 通过 ...

  10. AWS EC2 实例 SSH 无法登录故障

    文章链接 故障表现 在使用 jumperver 登录 AWS ec2 实例的时候发现 ssh 配合秘钥登录的时候无法登录, 具体报错如下: ssh -i /path/xx.pem user@10.0. ...