题目链接

原题解:

光滑的序列一定有长度为$K$的循环节。

使用动态规划,设$F(i,j)$为使前$i$个整数的和为$j$的最小修改次数。

记$cost(i,v)$为令$A_i,A_{i+K},A_{i+2K},\cdots$等于$v$需要而修改次数。则$F(i,j)=\min\limits_v \{F(i-1,j-v)+cost(i,v)\}$。

可以发现,$A_i,A_{i+K},A_{i+2K},\cdots$中至多有$O(\dfrac{N}{K})$个不同的值。

我们可以先用$F(i,j)=\min \limits_v \{F(i-1,j-v)+\left\lfloor \dfrac{N-i}{K} \right\rfloor +1\}$一次性转移没有在这些位置中出现过的$v$,然后再对这$O(\dfrac{N}{K})$个$v$单独转移。

复杂度为$O(KS\times \dfrac{N}{K})=O(NS)$。

补充:

$O(N^2)$比$O(N^3)$改进的地方是两点:

  • 使用$f(i-1,j)$的前缀最小值来设定$f(i,j)$的初值。
  • 枚举增加的数进行转移,于是可以判断这种数存不存在,进而减少无效转移。因为模$K$相同的位置只有$O(\dfrac{N}{K})$个,所以复杂度就对了。

代码(100分):

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define IL inline
#define RG register
using namespace std;
#define RI RG int
#define RC RG char
const int N=5000; int n,k,s,a[N+3];
int b[N+3][N+3],c[N+3];
int f[N+3][N+3]; int main(){
scanf("%d%d%d",&n,&k,&s);
for(RI i=1;i<=n;i++)
scanf("%d",&a[i]); for(RI i=1,t=1;i<=n;i++,t+1>k?t=1:t++){
b[t][a[i]]++;
c[t]++; } for(RI i=1;i<=s;i++)
f[0][i]=n+1;
f[0][0]=0;
for(RI i=1;i<=k;i++){
for(RI j=0,x=f[i-1][0];j<=s;j++){
x=min(x,f[i-1][j]);
f[i][j]=x+c[i]; } for(RI j=0;j<=s;j++)
if(b[i][j])
for(RI p=j;p<=s;p++)
f[i][p]=min(f[i][p],f[i-1][p-j]+c[i]-b[i][j]); } printf("%d",f[k][s]); return 0; }

【2020NOI.AC省选模拟#5】C. 光滑序列的更多相关文章

  1. NOI.AC省选模拟赛第一场 T1 (树上高斯消元)

    link 很容易对于每个点列出式子 \(f_{x,y}=(f_{x,y-1}+f_{x,y}+f_{x,y+1}+f_{x+1,y})/4\)(边角转移类似,略) 这个转移是相互依赖的就gg了 不过你 ...

  2. [NOI.AC省选模拟赛3.31] 星辰大海 [半平面交]

    题面 传送门 思路 懒得解释了......也是比较简单的结论 但是自己看到几何就退缩了...... 下周之内写一个计算几何的学习笔记! Code #include<iostream> #i ...

  3. [NOI.AC省选模拟赛3.31] 附耳而至 [平面图+最小割]

    题面 传送门 思路 其实就是很明显的平面图模型. 不咕咕咕的平面图学习笔记 用最左转线求出对偶图的点,以及原图中每个边两侧的点是谁 建立网络流图: 源点连接至每一个对偶图点,权值为这个区域的光明能量 ...

  4. [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]

    题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...

  5. [NOI.AC省选模拟赛3.23] 染色 [点分治+BFS序]

    题面 传送门 重要思想 真的是没想到,我很久以来一直以为总会有应用的$BFS$序,最终居然是以这种方式出现在题目中 笔记:$BFS$序可以用来处理限制点对距离的题目(综合点分树使用) 思路 本题中首先 ...

  6. [NOI.AC省选模拟赛3.23] 集合 [数学]

    题面 传送门 一句话题意: 给定$n\leq 1e9,k\leq 1e7,T\leq 1e9$ 设全集$U=\lbrace 1,2,3,...n\rbrace $,求$(min_{x\in S}\lb ...

  7. [noi.ac省选模拟赛]第12场题解集合

    题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...

  8. [noi.ac省选模拟赛]第10场题解集合

    题目 比赛界面. T1 不难想到,对于一个与\(k\)根棍子连接的轨道,我们可以将它拆分成\(k+1\)个点,表示这条轨道不同的\(k+1\)段. 那么,棍子就成为了点与点之间的边.可以发现,按照棍子 ...

  9. [noi.ac省选模拟赛]第11场题解集合

    题目   比赛界面. T1   比较简单.容易想到是求鱼竿的最大独立集.由于题目的鱼竿可以被分割为二分图,就可以想到最大匹配.   尝试建边之后会发现边的数量不小,但联系题目性质会发现对于一条鱼竿,它 ...

  10. [noi.ac省选模拟赛20200606]赌怪

    题目   点这里看题目. 分析   先特判掉\(K=2\)的情况.   首先可以考虑到一个简单 DP :   \(f(i)\):前\(i\)张牌的最大贡献.   转移可以\(O(n^2)\)地枚举区间 ...

随机推荐

  1. FRP 反向代理渗透

    前言 之前在一个项目中遇到了一个渗透环境,只能使用工具代理远程访问内网,于是便接触了FRP这款内网穿透工具,通过内网反向代理进行远程渗透测试.这篇文章就简单介绍如何实现FRP反向代理渗透,作为个人笔记 ...

  2. 「postOI」Lost Array

    题意 有一个序列 \(A=\{a_1, a_2, ..., a_n\}\),按如下方式构造一个 \((n + 1) \times (n + 1)\) 的矩阵 \(B\): \(B_{i0}=0\)(\ ...

  3. cython并行性能-计算滚动求和 rolling function

    cython通过编译为C程序提高性能有很多例子,通过OpenMP并行的性能没那么多. 今天尝试了一下似乎gcc对parallelism reduction优化的很厉害,加上OpenMP并行可以提高20 ...

  4. IBM免费服务器试用

    IBM公司的免费资源,仅需一个邮箱就可以注册申请,注册可以有60天试用期. 1.注册 点击 注册进入IBM教育资源官网进行注册,注册时仅需要一个有效邮箱,QQ,Gmail,outlook均可. 注册邮 ...

  5. appium遇到的问题

    问题1:权限问题:java.lang.SecurityException: Injecting to another application requires INJECT_EV ENTS permi ...

  6. defineProperty和Proxy

    Proxy  JS标准内置对象 const p = new Proxy(target, handler) 创建一个对象的代理: let obj = { a: { b: { c: 1 } } } let ...

  7. C盘爆红满了怎么办?既然C盘装不下了,那咱给C盘扩容不就完事了吗!

    我们在使用电脑的过程中,经常容易出现C盘爆红,反而其他盘还有大量可用空间的情况. 为什么会这样呢?其实主要就两种原因: 一是电脑使用习惯不好,不管什么软件都默认安装在C盘,大文件又喜欢放在桌面,久而久 ...

  8. SQL_TIP_JOIN_x

    没有条件的JOIN会导致数据数量变为两表的数据量的乘积结果. 用ON来在这些结果里进行筛选 on T1.A = T2.A的时候,如果T1的A是不重复的,则实际上是在对T2现有数据做筛选,结果数据量&l ...

  9. VC如何创建C编译器能使用的动态库

    方法 使用extern "C"修饰 设置统一的调用约定 举例 例1--使用__cdecl,一般C编译器使用此约定,如LabWidnows/CVI. cpp代码 extern &qu ...

  10. jsp <img src="“> src 相对路径的问题

    图片所在路径 jsp所在路径 调用处 相对路径 以调用处JSP位置为参考 每一个../代表上一级  4个 正好找到到webRoot 目录拼接后 webRoot /kernel/_static/img/ ...