CF39C-Moon Craters【dp】
正题
题目链接: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】的更多相关文章
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDOJ 1257 最少拦截系统 【DP】
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】
POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...
- HackerRank - common-child【DP】
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...
- LeetCode:零钱兑换【322】【DP】
LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...
随机推荐
- centos7上安装redis6-0-5
下载tar包 wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压tar包 tar -zxvf redis-6.0.5.tar.gz ...
- Linux放大缩小字体的快捷键
linux终端窗口字体缩放快捷键 环境:linux, 打开终端, 'ctrl' + '-'字体缩小,一行显示更多的内容 'ctrl' + 'shift' + '+'字体变大 ctl+shift+(+) ...
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- 如何修改leaflet的marker图标
1. 从官网中查看对应文档:https://leafletjs.com/ 2. 3. var greenIcon = L.icon({ iconUrl: 'leaf-green.png', shado ...
- springboot项目中进行XSS过滤
简单介绍 XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意 ...
- Ubuntu 配置、使用samba共享文件夹
安装库 sudo apt install smbclient samba samba-common 启动samba sudo /etc/init.d/samba start 备份配置文件 sudo c ...
- Linux centos7 nginx 平滑升级
2021-08-19为了方便读者的阅读,该文通篇使用绝对路径,各位朋友们在实际上操作中可以根据实际情况编写路径(#^.^#)1. 当前环境 # system cat /etc/redhat-relea ...
- linux centos7 模拟垃圾回收站功能以及 crontab 定时任务的设置
2021-08-04 1. 安装 环境:CentOS Linux release 7.5.1804 (Core) # 将 saferm.sh 拷贝到 /bin 目录下面 git clone git:/ ...
- Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法
总是提示 qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法: 也算是花了整整两个小时踩坑 ...
- vue 微信二维码扫码登录,附加 自定义样式
大概流程: 先安装 微信 的登录, 然后 局部引入,局部注册,方法调用,存 token,跳转路由 npm 安装 npm install vue-wxlogin --save-dev 微信安装 微信 ...