题目

传送门 to CF

思路

看到问题的第一反应:最大独立集是 N P NP NP 的。不过那是一般图。

再看一眼数据范围,我人傻了。怎么 n ≤ 1 0 9 n\le 10^9 n≤109 也能做啊?看来是结论题无疑。

然而这个结论真的想不到……我只能说 手推小数据发现

结论:方案的周期是 x + y \color{black}{x+y} x+y 。很容易就可以证明。

考虑可行性。显然只可能跨周期的时候出问题。如果 i , j ( i < j ) i,j\;(i<j) i,j(i<j) 在不同的周期内,且 j − i ∈ { x , y } j-i\in\{x,y\} j−i∈{x,y} 且都被选择了,那么 j − ( x + y ) j-(x+y) j−(x+y)(即上一个周期中的对应点)也别选择了,而 i − [ j − ( x + y ) ] = x + y − ( j − i ) ∈ { x , y } i-[j-(x+y)]=x+y-(j-i)\in\{x,y\} i−[j−(x+y)]=x+y−(j−i)∈{x,y},即本周期内就有相邻点对,不成立。

考虑必要性。既然可以以周期的形式存在,那么对于任意一种方案,只需要取数量最多的一个周期替换其它区间。显然答案不会变差。(你可能有疑问:最后有一个不是完整周期的区间,怎么能换?但是,假如这个非完整周期长度为 t t t 且点集大于周期的长度为 t t t 的前缀,那么就取它和周期的长度为 x + y − t x+y-t x+y−t 的后缀作为周期——即原序列中的最后 x + y x+y x+y 个。)

说明了这一点,我们就只需要考虑这个周期长什么样子。设 t = ⌊ n x + y ⌋ , r = n m o d ( x + y ) t=\lfloor\frac{n}{x+y}\rfloor,\;r=n\bmod(x+y) t=⌊x+yn​⌋,r=nmod(x+y),那么就有 t + 1 t+1 t+1 个长度为 r r r 的、 t t t 个长度为 x + y − r x+y-r x+y−r 的交替出现。相当于选点的时候,是带权的:选择 i ∈ [ 1 , r ] i\in[1,r] i∈[1,r] 就提供 t + 1 t+1 t+1 的贡献,否则提供 t t t 的贡献。

由于区间长度只有 x + y x+y x+y,你会发现 一个点的度数恰好是 2 2 2 。因为 i − x i-x i−x 与 i + y i+y i+y 恰好有一个在 [ 1 , x + y ] [1,x+y] [1,x+y] 内, i + x i+x i+x 与 i − y i-y i−y 也恰好有一个在 [ 1 , x + y ] [1,x+y] [1,x+y] 内。每个点的度数都是 2 2 2,形成的必定是

环就可以直接 d p \tt dp dp 了嘛!特殊讨论一下第一条边,然后把它断开成为链,这就是 O ( x + y ) \mathcal O(x+y) O(x+y) 的 d p \tt dp dp 了。

代码

写得稍微有点丑,但是跑的非常快。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long int_;
inline int readint(){int a = 0; char c = getchar(), f = 1;for(; c<'0'||c>'9'; c=getchar())if(c == '-') f = -f;for(; '0'<=c&&c<='9'; c=getchar())a = (a<<3)+(a<<1)+(c^48);return a*f;
}const int MaxN = 22;
const int infty = (1<<30)-1;
int item[MaxN<<1], len;
int dp[MaxN<<1][2];
int work(int r,int t){/* case 1: not choose item[0] */ ;dp[0][1] = -infty, dp[0][0] = 0;for(int i=1; i<len; ++i){dp[i][1] = dp[i-1][0]+t+(item[i]<r);dp[i][0] = max(dp[i-1][0],dp[i-1][1]);}int res = max(dp[len-1][0],dp[len-1][1]);/* case 2: not choose item[len-1] */ ;dp[0][1] = t+(item[0]<r);for(int i=1; i<len-1; ++i){dp[i][1] = dp[i-1][0]+t+(item[i]<r);dp[i][0] = max(dp[i-1][0],dp[i-1][1]);}res = max(res,max(dp[len-2][0],dp[len-2][1]));return res;
}bool vis[MaxN<<1];
int main(){int n = readint();int x = readint(), y = readint();int P = x+y, t = n/P, r = n%P;if(x > y) swap(x,y); // x < yint ans = 0;for(int i=0; i<x; ++i){if(vis[i]) continue;int j = i; len = 0;while(!vis[j]){while(j+x < P){item[len ++] = j;vis[j] = true;j += x; // jump down}item[len ++] = j; // tailvis[j] = true; // put tagj -= y; // go back for help}ans += work(r,t);}printf("%d\n",ans);return 0;
}

[CF1463F]Max Correct Set相关推荐

  1. CF1463F Max Correct Set(取小样法+状压 DP)

    CF1463F Max Correct Set 要求选出集合 \(U=\{1,2,3,\dots,n\}\) 的一个子集 \(S\),满足:如果 \(a \in S\) 并且 \(b \in S\), ...

  2. 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)

    文章目录 一:CF1463F 二:CF1152F2 三:CF1342F 一:CF1463F Max Correct Set 有一个结论:以x+yx+yx+y为周期排列填充一定是不劣于最后的答案的 令p ...

  3. TigerGraph Cloud 使用,以及Python的链接操作

    最近项目使用tigergraph,因为才接触,边学边记录. Cloud-Based Graph Database Solutions for Agile Teams 点击start free 登录已有 ...

  4. 利用stm32和PC做一个示波器

    一.通过stm32f103c6的adc通过DMA的方式保存N个电压数值. 二.将电压数据通过usb(hid)发送至PC /* USER CODE END 2 */while (1){/* USER C ...

  5. matlab 滑块 设置,MATLAB滑块步骤行为

    我在MATLAB 2012a中使用GUIDE创建了一个滑块小部件.我想要它控制一个轴,显示图像,滑块通过它们的序列. 我在m文件的一部分中设置了Min,Max和SliderStep的滑块属性. sli ...

  6. 趋势拟合策略量化分析

    根据趋势拟合的量化分析方法,是对股票价格历史数据进行曲线拟合,从而预测出未来几天的股价.在本文所示的程序中,用fndays表示所用历史数据的天数,pndays表示预测未来的天数.例如我们可以用过去10 ...

  7. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 栈 链表

    E. Correct Bracket Sequence Editor 题目连接: http://www.codeforces.com/contest/670/problem/E Description ...

  8. U3D-3D MAX Biped导出.fbx到Unity的Humanoid的骨架不匹配(Disable Triangle Pelvis, Enable Triangle Neck)

    authro : jave.lin date : 2018-02-02 如题所述 因为本人不熟悉3D MAX,也不熟悉3D项目,目前是第一次尝试制作3D项目,途中遇到好大的坑,记录一下,算是积累.巩固 ...

  9. ath79 spi报错:ath79-spi 1f000000.spi: cs1 = max 1

    一.问题及其解决方法 ath79 在dts中配置spi,固件启动后出错log如下: [ 0.374839] ath79-spi 1f000000.spi: cs1 >= max 1 [ 0.37 ...

最新文章

  1. nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)...
  2. Linux安装phpMyAdmin详细步骤
  3. javascript 数字精度问题
  4. python-装饰器简介
  5. SVN提示: File or directory '*' is out of date; try updating 解决方案
  6. Mybatis Plus 的BaseMapper 和 Model有什么用
  7. 使用VS code编辑md文件,并导出pdf
  8. 2021年电工(初级)考试及电工(初级)模拟考试系统
  9. 通达新版OA,服务“企业”别忘了“人”
  10. 电动汽车充电解决方案领导品牌智充科技获壳牌资本投资;安百拓完成收购测井服务公司Kinetic | 能动...
  11. ps里面的css,今天来为大家介绍PS中的图层样式
  12. Archlinux kde 美化
  13. Model based RL概述
  14. paintComponent方法的一些小把戏
  15. ISO7816 智能卡 接口
  16. 2022年G2电站锅炉司炉考试题库及模拟考试
  17. 2015百度面试题--对10亿个32位整数去重和排序
  18. 错题积累(一)——(大一上学期C语言)
  19. tiny4412 裸机程序 六、重定位代码到IRAM+0x8000
  20. Sqli-labs之Less-11和Less-12

热门文章

  1. 005:列表、循环、分支练习题
  2. Python串口通信发送浮点型数据
  3. 更改WPS云文档保存位置
  4. 【Windows逆向】Windows进程动态patch入门+pyqt5搭建GUI
  5. (论文阅读)实例分割之PolarMask
  6. Cmake的重新编译
  7. 职称计算机初级应知应会书,职称计算机考试用书
  8. 天翼云对象存储Java对接(经典版 Ⅱ型)
  9. 商科能读计算机专业吗,我本科读的计算机 想去新西兰留学可以换专业吗? 没分了跪求啊,...
  10. ios 程序发布成ipa 文件 通过 web 下载和安装。install App via OTA