$CH0601\ Genius\ ACM$ 倍增优化DP
Description
给定一个长度为N的数列A以及一个整数T.我们要把A分成若干段,使得每一段的'校验值'都不超过N.求最少需要分成几段.
Sol
首先是校验值的求法:
要使得'每对数的差的平方'之和最大,显然就是先排序,然后取最大和最小为一对,次大和次小为一对.....
然后是问题的转化:求最少分的段数,显然就是确定左端点后,在校验值不超过T的前提下尽量扩展右端点.
优化就在于右端点的扩展,当然就是用倍增辣qwq
还有就是求校验值的优化:可以不用每次都快排,而是先排增加的一段,然后归并就好了
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
#define yes(i,a,b) for(Rg int i=a;i>=b;i++)
#define ll long long
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int T,n,m,as,a[],b[],c[];
ll K;
il bool ck(int l,int r,int md)
{
go(i,md,r)b[i]=a[i];
sort(b+md,b+r+);
int i=l,j=md;
go(k,l,r)
if((i<=md- && b[i]<b[j]) || j>r)c[k]=b[i++];
else c[k]=b[j++];
i=l,j=r;int t=min(m,(r-l+)/);ll nw=;
while(t--)
nw+=1LL*(c[i]-c[j])*(c[i]-c[j]),i++,j--;
if(nw<=K)
{
go(i,l,r)b[i]=c[i];
return ;
}
return ;
}
int main()
{
T=read();
while(T--)
{
n=read(),m=read();scanf("%lld",&K);as=;
go(i,,n)a[i]=read();
int l=,r=,p=;
b[]=a[];
while(l<=n)
{
if(r+p<=n && ck(l,r+p,r+))r+=p,p*=;
else p/=;
if(!p || r==n){as++,l=++r,p=,b[l]=a[l];}
}
printf("%d\n",as);
}
return ;
}
随机推荐
- js this详解
This的定义: 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用. this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是 ...
- 网站的域名带www的和不带www的有什么区别呀
国内用户习惯用www,不过默认的不带www的域名要好过带www的,带Www的是二级域名,不带的是顶级域名,默认的在搜索引擎中得权重会比较高 区别就在于一个带www一个不带www 其他都一样.www的域 ...
- 测试代码的执行时间魔法方法%time和%timeit
对于规模更大.运行时间更长的数据分析应用程序,你可能会希望测试一下各个部分或函数调用或语句的执行时间.你可能会希望了解某个复杂计算过程中到底是哪些函数占用的时间最多.幸运的是,在开发和测试代码的过程中 ...
- H3C 分组交换连接模型
- SuperSocket进程级别隔离
在 SuperSocket 1.5 中, 我们增加了 AppDomain 级别隔离的功能,让你可以运行多个服务器实例在相互独立的 AppDomain 上. 此功能提供了较高级别的安全性和资源的隔离,并 ...
- 2001年NOIP普及组复赛题解
题目涉及算法: 数的计算:动态规划: 最大公约数和最小公倍数问题:质因数分解: 求先序排列:递归: 装箱问题:动态规划(纯0-1背包问题) 数的计算 题目链接:https://www.luogu.or ...
- Python--day49--ORM框架SQLAlchemy之relationship的使用(有时间要从新看,这里状态不好,没有仔细听)
小贴士: 迭代器:只有在循环的时候才一个一个往外拿 relationship
- uva 624 CD (01背包)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best musi ...
- BZOJ 4034"树上操作"(DFS序+线段树)
传送门 •题意 有一棵点数为 N 的树,以点 1 为根,且树点有边权. 然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的 ...
- [C++] 烦人的error LNK2019和error LNK2001
常见原因: 没有正确的设置引用的lib,新手常犯这个错误,这是最容易解决的问题. extern "C"的问题.如果C++写的dll要给C程序用,那么就要注意extern " ...