CCPC2020长春 J. Abstract Painting(状压dp)

博客介绍了如何使用状压动态规划解决CCPC2020长春比赛中J题——Abstract Painting的问题。题目要求在x轴上画半径不超过5的圆,使得任意两个圆不相交,已知k个固定圆,求满足条件的画法方案数。由于状态数和转移复杂度限制,作者采用状态压缩的方法,记录前10个点的圆内情况,并枚举所有可能的圆进行转移。在转移过程中,还需检查新状态是否包含已有的圆。博客提供了详细的问题分析和代码实现。
摘要由CSDN通过智能技术生成

J. Abstract Painting(状压dp)

在这里插入图片描述

题意

给定n,在x轴[0,n]范围内画半径不超过5的圆,圆心在x轴上,要求任意两个圆不相交(可以相切),且已有固定的k个圆,求满足条件的画法方案数。

分析

很明显从dp的角度思考,一开始考虑区间dp,但是总状态数 O ( n 2 ) O(n^2) O(n2) ,转移 O ( n ) O(n) O(n),总复杂度 O ( n 3 ) O(n^3) O(n3),超时。

于是从线性dp的角度考虑,发现因为圆的半径小于等于5,因此某一点的情况只对从这一点往后10个点有后效性,也就是说可以用状态压缩的方法记录前10个点是否在某个圆内 ( 2 10 ) (2^{10}) (210),同时枚举所有以某点为右界的圆的方案数( 2 5 2^5 25)进行转移。状态数 O ( 2 10 ⋅ n ) O(2^{10}·n) O(210n),转移复杂度 O ( 2 5 ) O(2^5)

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值