tj:80pts:維護f[i][j]表示當前第i個方塊必須選,且選了j個的最優解,設w[i]為第i個方塊長度

則可以枚舉上次選了第k個方塊,則f[i][j]=max{f[k][j-1]+w[i]*(i-k)}

初值:f[i][1]=w[i]*i

100pts:記g[i]表示f[i][j-1],f[i]表示f[i][j],考慮每一次用g[i]得到f[i],首先將f數組清空

初值依然如上

考慮以前可以用來更新現在答案的2個點j,k什麼時候j比k優(k&lt;j)" role="presentation" style="position: relative;">(k<j)(k<j),則g[j]+w[i]∗(i−j)&gt;g[k]+w[i]∗(i−k)" role="presentation" style="position: relative;">g[j]+w[i]∗(i−j)>g[k]+w[i]∗(i−k)g[j]+w[i]∗(i−j)>g[k]+w[i]∗(i−k)

g[j]−w[i]∗j&gt;g[k]−w[i]∗k" role="presentation" style="position: relative;">g[j]−w[i]∗j>g[k]−w[i]∗kg[j]−w[i]∗j>g[k]−w[i]∗k

所以g[j]−g[k]&gt;w[i]∗(j−k)" role="presentation" style="position: relative;">g[j]−g[k]>w[i]∗(j−k)g[j]−g[k]>w[i]∗(j−k) 除過去得到(g[j]−g[k])/(j−k)&gt;w[i]" role="presentation" style="position: relative;">(g[j]−g[k])/(j−k)>w[i](g[j]−g[k])/(j−k)>w[i]

w[i]單調不增,考慮斜率優化,維護一个斜率單調遞減的隊列,保證其中所有斜率小於w[i],當sl(q[h],q[h+1])>w[i]時pop掉q[h]

jzoj5347的更多相关文章

随机推荐

  1. geoserver 的缓存技术

    geoserver提到的缓存工具共有两个:tilecache和geowebcache.geowebcache是java写的,整合进geoserer中. tilecache则是python写的一个小程序 ...

  2. array_column()提取二维数组中某个值

    <?php $multipleCommodity = array( =>array(), =>array() ); $arr1=array_column($multipleCommo ...

  3. How to use jQuery countdown plugin

    Install We provide two installation methods: Bower bower install jquery.countdown Manual Download th ...

  4. 中介者模式(QQ聊天室我觉得是个很生动的例子简单易懂)

    设计模式之中介者模式(Mediator) 一.初识中介者模式 那些年,我们一起上过的大学,班级里有班长,有团书记.想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上 ...

  5. MySQL 组合查询 concat

      concat( pms_user.f_pu_name, '(' , pms_user.f_pu_realName,')') as userIds

  6. Monte carlo

    转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...

  7. linux 静态链接库demo

    目录结构 ./main.c        #include<stdio.h> #include "./lib/jtlib1.h" int main() {     pr ...

  8. 2018.09.30 bzoj2288:生日礼物(贪心+线段树)

    传送门 线段树经典题目. 每次先找到最大子段和来更新答案,然后利用网络流反悔退流的思想把这个最大字段乘-1之后放回去. 代码: #include<bits/stdc++.h> #defin ...

  9. Django介绍(3)

    https://www.cnblogs.com/yuanchenqi/articles/5786089.html

  10. 命令行生成war包

    1.找到自己的代码位置 2.进入cmd界面 3.进入对应的目录 4.执行命令 5.就会开始自动打包 6.在文件夹下生成对应的war包