今天挺开心的\(\sim\),省选加油\(!\)

\(P4893\)忘情

我能说今晚我才真正学会\(wqs\)和斜率优化吗\(?\)

恰好选几个,必然需要\(wqs\)二分一下

那么考虑不考虑次数情况下转移,\(dp[i]\)表示前\(i\)个分成若干段的最小代价,然后直接转移是\(O(n^2)\)

比较显然的可以写成斜率式

\(dp[j]-2\times sum[j]+sum[j]\times sum[j]=2\times sum[i]\times sum[j]+dp[i]-(sum[i]+1)^2\)

维护一个下凸包即可

#define Eternal_Battle ZXK
#include<bits/stdc++.h>
#define int long long
#define MAXN 100005
using namespace std;
int a[MAXN],sum[MAXN],dp[MAXN];
int sta[MAXN],num[MAXN];
int n,m,INF=LLONG_MAX;
int Y(int x)
{
return dp[x]-2*sum[x]+sum[x]*sum[x];
}
int X(int x)
{
return sum[x];
}
double slope(int x1,int x2)
{
return (double)(Y(x2)-Y(x1))/(X(x2)-X(x1));
}
bool check(int x)
{
int head,tail;
sta[head=tail=1]=0;
memset(num,0,sizeof(num));
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
{
while(head<tail&&slope(sta[head],sta[head+1])<2*sum[i]) head++;
dp[i]=dp[sta[head]]+(sum[i]-sum[sta[head]]+1)*(sum[i]-sum[sta[head]]+1)+x;
num[i]=num[sta[head]]+1;
while(head<tail&&slope(sta[tail-1],sta[tail])>slope(sta[tail],i)) tail--;
sta[++tail]=i;
}
return num[n]<=m;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sum[i]=sum[i-1]+a[i];
}
if(m==2)
{
int Ans=INF;
for(int i=0;i<=n;i++)
{
Ans=min(Ans,(sum[i]+1)*(sum[i]+1)+(sum[n]-sum[i]+1)*(sum[n]-sum[i]+1));
}
cout<<Ans<<"\n";
return 0;
}
memset(dp,0x3f,sizeof(dp));
int l=0,r=INF/2,mid,ans;
while(l<=r)
{
mid=(l+r)>>1;
if(check(mid))
{
//如果小于等于m
//那么就是减多了
r=mid-1;
ans=mid;
}
else l=mid+1;
}
// cout<<"Ans: "<<ans<<"\n";
check(ans);
cout<<dp[n]-m*ans<<"\n";
}

P4983忘情的更多相关文章

  1. 洛谷P4983 忘情 (WQS二分+斜率优化)

    题目链接 忘情水二分模板题,最优解对划分段数的导数满足单调性(原函数凸性)即可使用此方法. 详细题解洛谷里面就有,不啰嗦了. 二分的临界点让人有点头大... #include<bits/stdc ...

  2. 决策单调性&wqs二分

    其实是一个还算 trivial 的知识点吧--早在 2019 年我就接触过了,然鹅当时由于没认真学并没有把自己学懂,故今复学之( 1. 决策单调性 引入:在求解 DP 问题的过程中我们常常遇到这样的问 ...

  3. DP 优化方法大杂烩 & 做题记录 I.

    标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...

  4. 高考集训讲课(To 高一)

    高考集训讲课(To 高一) 主要是怕下午讲着讲着把自己讲懵了,有一定的迷糊概率 经过机房的讨论,一致认为插头\(DP\)实用性不大,所以这次不讲了,先把重要的讲一讲. 顺便吐槽一下,凭什么另外几个人都 ...

  5. Luogu4983 忘情

    Luogu4983 忘情 定义序列 \(x_1,\ x_2,\ \cdots,\ x_n\) 的值为 \(\frac{((\displaystyle\sum_{k=1}^nx_k\times \bar ...

  6. 洛谷T51924 忘情

    二分上界有多大开多大 二分上界有多大开多大 二分上界有多大开多大 重要的事情说三遍 又被bright神仙带着做题了 先无脑上wqs二分 我们可以把这个柿子画一下,区间的花费就变成((sigema(l~ ...

  7. B 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 枪与玫瑰 我看了一下聊天室的名单,哈哈哈,我不禁喜出望外:蝶恋花那丫头片子挂在线上呢,真是天助我也.初时的担心一扫而光,我精神抖擞地喝下一大口咖啡,猛抽了三口烟,现在的我 ...

  8. 详解Bootstrap面板组件

    面板组件主要作用是用来处理一些其他组件无法完成的功能,在不同的版本中具有不同的源码: LESS:panels.less SASS:_panels.scss 基础面板非常简单,就是一个div容器中运用了 ...

  9. [ZZ] Cache

    http://blog.sina.com.cn/s/blog_6472c4cc0102duzr.html 处理器微架构访问Cache的方法与访问主存储器有类似之处.主存储器使用地址编码方式,微架构可以 ...

随机推荐

  1. 一文学会Java的交互式编程环境jshell

    什么是交互式编程环境?重点词交互,在这样的编程环境中,你每输入一行代码,环境都会给你一个反馈,这就是交互式的编程环境.这种编程环境并不太适合工程化的复杂性需求,但在一些快速验证.简单计算之类的场景下还 ...

  2. node-sass,sass-loader和node之间的关系

    vue-cli运行在node平台上scss语言是运行在 node-sass平台上node-sass的运行环境是node平台vue-cli工程中不识别scss语法,.scss模块,sass-loader ...

  3. einsum函数介绍-张量常用操作

    einsum函数说明 pytorch文档说明:\(torch.einsum(equation, **operands)\) 使用基于爱因斯坦求和约定的符号,将输入operands的元素沿指定的维数求和 ...

  4. C++调用C#的动态库dll

    以往我们经常是需要使用C#来调用C++的dll,这通过PInvoke就能实现.现在在实际的项目过程中,有时会遇到在C++的项目中调用某个C#的dll来完成特定的某个功能,我们都知道,Native C+ ...

  5. DAST 黑盒漏洞扫描器 第二篇:规则篇

    0X01 前言 怎么衡量一个扫描器的好坏,扫描覆盖率高.扫描快.扫描过程安全 而最直接的效果就是扫描覆盖率高(扫的全) 怎么扫描全面,1 流量全面 2 规则漏报低 流量方面上篇已经讲过,这篇主要讲扫描 ...

  6. Spring框架 - Spring和Spring框架组成

    Spring框架 - Spring和Spring框架组成 Spring是什么?它是怎么诞生的?有哪些主要的组件和核心功能呢? 本文通过这几个问题帮助你构筑Spring和Spring Framework ...

  7. 强化学习-Windows安装gym、atari和box2d环境

    安装gym pip3 install gym pip3 install gym[accept-rom-license] 安装atari环境[可选] 下载安装VS build tools 如果出现 OS ...

  8. CMU15445 (Fall 2019) 之 Project#1 - Buffer Pool 详解

    前言 这个实验有两个任务:时钟替换算法和缓冲池管理器,分别对应 ClockReplacer 和 BufferPoolManager 类,BufferPoolManager 会用 ClockReplac ...

  9. Android高仿网易云音乐-启动界面实现和动态权限处理

    效果 实现分析 基本上没有什么难点,就是布局,然后显示用户协议对话框,动态处理权限,判断是否显示引导界面,是否显示广告界面等. 布局 <?xml version="1.0" ...

  10. halcon数组的一些使用

    没啥好讲的,这里对于不是数组部分的东西就不进行讲解了. area_center(RegionOpening,Area, Row, Column).使用area_center来求区域的中心和面积时,返回 ...