斜率优化系列——训练记录

斜率优化训练记录

前言

斜率优化一般用于优化dp的转移,借着训练斜率优化的相关问题来提升一些DP思维。选择老学长留下的专题场来练手,由于该场题数较多,以及个人不太愿意长时间进行单一专题训练,因此开此文来记录断续的训练结果和心得。

记录

题一

由一道简单入门题玩具装箱开头,题意和思路比较简单就不讲了。
代码

#include<bits/stdc++.h>
#define dd(x) cout<<#x<<" = "<<x<<" "
#define de(x) cout<<#x<<" = "<<x<<endl
#define sz(x) int(x.size())
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define All(x) x.begin(),x.end()
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef priority_queue<int> BQ;
typedef priority_queue<int,vector<int>,greater<int> > SQ;
const int maxn=1e5+10,INF=0x3f3f3f3f,mod=1e9+7;
ll f[maxn],sum[maxn],a[maxn],q[maxn],h,t;
inline double K(int i,int j)
{
    double dy=a[j]*a[j]+f[j]-a[i]*a[i]-f[i],dx=a[j]-a[i];
    return dy/dx;
}
int main()
{
    int n,l;
    cin>>n>>l;
    for (int i=1;i<=n;++i)
    {
        int x;
        scanf("%d",&x);
        sum[i]=sum[i-1]+x;
        a[i]=i+1+sum[i];
    }
    a[0]=1;
    h=t=1;
    for (int i=1;i<=n;++i)
    {
        while (h<t&&K(q[h],q[h+1])<2*(sum[i]+i-l))
            h++;
        int j=q[h];
        ll tmp=i-j-1+sum[i]-sum[j]-l;
        f[i]=f[j]+tmp*tmp;
        while (h<t&&K(q[t-1],q[t])>K(q[t-1],i))
            t--;
        q[++t]=i;
    }
    cout<<f[n];
    return 0;
}

原文地址:https://www.cnblogs.com/orangee/p/10661996.html

时间: 2024-07-31 17:42:42

斜率优化系列——训练记录的相关文章

学渣乱搞系列之dp斜率优化

学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很大部分参考了大神Accept的文章,不过此神貌似早已绝迹江湖,这篇文章写得好,也写得很差,前半部分叙述得很好,可是关键,关键部分说得很乱,有些许错误,很多大神都进行了评论指出,但是大神Accept貌似没有修改的意思,故重新总结下,以便自己以后查阅和复习啊. 下面看一个例题Print Article.

训练记录PART1

11/05 bestcoder #93 C 等价于给出很多环,等概率选择N个点,收益为出现过点的环的环长lcm.不同的环只有 \(\sqrt {26}=6\) 个,用\(f_S\)表示点出现在状态为S的那些环里的选取总数,DP一下即可. bestcoder #93 D 考虑meet in the middle.推一下式子,设左侧选的数和为\(A_{left}t\),两两乘积之和为\(B_{left}\),那么满足\(B_{left}+B_{right}+A_{left}*A_{right}>=0

Dailight 训练记录

现场赛记录 19 CCPC 湘潭邀请赛  11/Gold 19 ICPC 西安邀请赛 49/Silver 训练规划: hl: 1.深入增强图论,数据结构的能力,包括但不限于树形dp,点分治,多写dp,学习斜率优化,四边形优化 2.保证银牌及以下图论,数据结构,dp的通过率,最好可以在十分钟内出思路 3.养成提交前检查代码的习惯,不出现傻逼错误. 4.学习简单数论(逆元,组合数),尤其是数论结合图论的应用 gbs: 1.加快上机 ->  写完代码过样例 这一过程的速度. 2.减少debug占用机时

(中等) CF 311B Cats Transport,斜率优化DP。

Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There's a straight road across the farm and n hills along the road, numbered from 1 to n from left to right. The distance between hill i and (i - 1) is di meters. The fee

【BZOJ3672】[Noi2014]购票 树分治+斜率优化

[BZOJ3672][Noi2014]购票 Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的父亲用道路连接.为了方便起见,我们将全国的 n 个城市用 1 到 n 的整数编号.其中SZ市的编号为 1.对于除SZ市之外的任意一个城市 v,我们给出了它在这棵树上的父亲城市 fv  以及到父亲城市道路的长度 sv. 从城市 v 前往SZ市的方法为:选择城

【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治

[BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个实数.每天随着市场的起伏波动,两种金券都有自己当时的价值,即每一单位金券当天可以兑换的人民币数目.我们记录第 K 天中 A券 和 B券 的价值分别为 AK 和 BK(元/单位金券).为了方便顾客,金券交易所提供了一种非常方便的交易方式:比例交易

【以前的空间】斜率优化的一点点总结

今天有看了一道dp题,发现好像裸不能过,应该是要斜率优化,结果发现自己那点傻×智商早把这东西忘得差不多,而且当时也是有点乱不是弄得很懂.于是又花了一个早上来整理下. <用单调性优化动态规划> 这个东西的话很好.但是由于我蒟蒻所以看不懂.先找了模板题到网上找题解,然后跟着题解自己推.那么我就用<[ZJOI2007]仓库建设>来推吧! 首先很容易写出状态转移方程 f[i]:=Min(f[j]+w[j,i])+c[i] 其中f[i]表示前i个的最优状态且在i建一个仓库,j表示上一个仓库的

Expert 诊断优化系列------------------语句调优

前面三篇通过CPU.内存.磁盘三巨头,讲述了如何透过现在看本质,怎样定位服务器三巨头反映出的问题.为了方便阅读给出链接: Expert 诊断优化系列------------------你的CPU高么? Expert 诊断优化系列------------------内存不够用么? Expert 诊断优化系列------------------冤枉磁盘了 通过三篇文章的基本介绍,可以看出系统的语句如果不优化,可能会导致三巨头都出现异常的表现.所以本篇开始介绍系统中的重头戏--------------

【DP】DP的斜率优化学习笔记

文前:其实我的DP这么弱目测学了斜率优化也好不了因为我的DP稍微有点难度就推不出状态转移方程了>0<(求神犇别嘲讽) 然而我还是义无反顾的学了斜率优化(其实你只是做题时候用到了顺便去看了一下吧魂淡!) 不说了我们切正文 ----------线割分是我>ω<----------------– 在做DP时候我们常常会因为自己推出的方程有太多的状态而苦恼,这些状态中有太多是对最终答案没有贡献的,而我们还需要去记录他们,最终换来一个T真是令人不爽 但是有一些特殊的DP就可以使用斜率优化来避