$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 ;
}
随机推荐
- CF1238E.Keyboard Purchase 题解 状压/子集划分DP
作者:zifeiy 标签:状压DP,子集划分DP 题目链接:https://codeforces.com/contest/1238/problem/E 题目大意: 给你一个长度为 \(n(n \le ...
- 从HelloWorld看Knative Serving代码实现
摘要: Knative Serving以Kubernetes和Istio为基础,支持无服务器应用程序和函数的部署并提供服务.我们从部署一个HelloWorld示例入手来分析Knative Servin ...
- pytorch nn.Embedding
pytorch nn.Embeddingclass torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_no ...
- C# 16 进制字符串转 int
最近在写硬件,发现有一些测试是做 16 进制的字符串,需要把他转换为整形才可以处理. 本文告诉大家如何从 16 进制转整形 如果输入的是 0xaa 这时转换 int 不能使用 Parse 不然会出现异 ...
- java 集合之HashMap的三种遍历
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. 这周我们只需记住三种遍历方法 1.通过keySet()获取键,再利用hashmap里面的.get(key)方法通过键获取 ...
- Codeforces Round #196 (Div. 1 + Div. 2)
A. Puzzles 对\(f[]\)排序,取连续的\(m\)个. B. Routine Problem 考虑\(\frac{a}{b}\)和\(\frac{c}{d}\)的大小关系,适配后就是分数的 ...
- jQuery 选择器 bug
$(function(){ $(".menu li").hide(); //目标对象(一定要用class或id选择器)绑定函数 $(".menu").click ...
- H3C DHCP地址分配方式
- java 注解(Annotation)
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记. 以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就 ...
- 2019-8-6-在-Gitlab-开启-MatterMost-机器人
title author date CreateTime categories 在 Gitlab 开启 MatterMost 机器人 lindexi 2019-8-6 19:42:1 +0800 20 ...