CF39C Moon Craters

博客介绍了如何解决编程竞赛题目CF39C 'Moon Craters'。通过将圆转化为线段并离散化,然后利用区间动态规划方法,定义dp[i][j]表示[i, j]区间内最多圆的数量。虽然初始看似复杂度为O(n^3),但实际优化后复杂度为O(n^2),通过枚举圆的边界进行转移。最后,输出具体的解决方案需要记录划分点。" 18774581,1308767,Linux归档与压缩实战:tar、cpio、gzip、bzip2、lzma和zip,"['Linux', '文件管理', '压缩工具', '归档工具', '系统备份']
摘要由CSDN通过智能技术生成

一、题目

点此看题

二、解法

把每个圆表示成线段覆盖,判断相不相交只需要比较大小,所以我们可以先离散化。

考虑使用区间 d p dp dp,但一定要想清楚区间指的是什么,一开始我把区间理解成连续的若干个圆,发现根本做不动。而本题显然把区间理解成数轴上的区间更好做,定义 d p [ i ] [ j ] dp[i][j] dp[i][j]为区间 [ i , j ] [i,j] [i,j]最多的圆数量,转移:
d p [ i ] [ j ] = d p [ i ] [ x ] + d p [ x ] [ j ] + g [ i ] [ j ] dp[i][j]=dp[i][x]+dp[x][j]+g[i][j] dp[i][j]=dp[i][x]+dp[x][j]+g[i][j] g [ i ] [ j ] g[i][j]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值