P8340 [AHOI2022] 山河重整

该博客介绍了如何解决AHOI2022比赛中的P8340问题。题目要求找出能还原[1,n]所有数的集合子集数量。通过分析得出,如果集合S的数按升序排列,前j个数可以还原[1, ∑i=1jxi],当∑i=1jxi+1≥xj+1时,前j+1个数可以还原更大型号的数。博主提出了一种O(n^2)的动态规划解决方案,并通过容斥原理和CDQ分治优化,实现了O(nn)的时间复杂度解法。" 20922573,1500131,Android通过特定View获取控件避免NULL,"['Android开发', 'findViewById', '布局加载', '控件获取']
摘要由CSDN通过智能技术生成

P8340 [AHOI2022] 山河重整

题目大意

取一个 [ 1 , n ] [1,n] [1,n]的数的集合 S S S,如果 S S S中的一个子集的和等于 x x x,称 S S S可以还原 x x x,问有多少个子集 S S S可以还原 [ 1 , n ] [1,n] [1,n]

题解

肯定要把这个条件转化成一个比较好处理的充要条件,如果有一个集合 S S S中的数从小到大排列为 x 1 , x 2 ⋯ x n x_1,x_2\cdots x_n x1,x2xn,考虑这样一件事,假设前 j j j个数能够还原 [ 1 , ∑ i = 1 j x i ] [1,\sum_{i=1}^jx_i] [1,i=1jxi],如果有 ∑ i = 1 j x i + 1 ≥ x j + 1 \sum_{i=1}^jx_i+1\ge x_{j+1} i=1jxi+1xj+1,所以前 j + 1 j+1 j+1个数能够还原

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值