决策单调性 + WQS二分

我们首先列出转移式: \(f[i]=Min(f[j]+Sum[j+1 , i])\)

首先我们考虑如果让一段区间的小鱼在一起的代价怎么预处理,我们可以对于一个上三角矩阵求个二维前缀和,那么我们计算 \([j+1,i]\) 这段区间的代价就是 \(S[i,i]-S[i,j]\) ,得到的是一个等腰直角三角形的和

那么原来的转移式就可以这么写:\(f[i]=Min(f[j]+S[i,i]-S[i,j])\)

然后我们不考虑车辆数量的限制,那么对于 j 和 k ,如果 \(j<k\) ,那么首先 \(f[j]\) 必然小于 \(f[k]\) ,但是随着 i 的增大, \(S[i,i]\) 是不变的,但是 \(S[i,j]\) 和 \(S[i,k]\) 之间的差肯定是越来越大的,即对于 \(f[j]-S[i,j]\) 和 \(f[k]-S[i,k]\) ,肯定是一开始选 j 比较优,后来两个函数有一个交点,过了这个交点就是 k 比较优了,并且两个函数的交点只有一个,所以我们可以二分一个交点,然后保持交点和 j 同时单调递增,这样就可以做一个 O(n) 的斜率优化 dp 了...

但问题是这 goushi 的车辆是有数量限制的,但是我们发现总价格和使用车辆数是负相关的,那么我们可以考虑对于每辆车加上一个租赁代价,这在斜率优化中是不影响计算的,然后租赁的代价越高,最优解中使用车辆数肯定越小,那么我们可以二分这个租赁代价,得到车辆数恰好为指定的 K 时,把租赁的代价减去,这样就得到了答案

总复杂度讲道理是 \(O(n~log n ~ log ~S[n,n])\) ,因为外面 wqs 二分 \(S[n,n]\),里面也要二分交点

code

//by Judge
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
#define ll long long
using namespace std;
const int M=4003;
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline ll read(){ ll x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} int n,K,ans,s[M][M],f[M],w[M];
inline int calc(int j,int i){
return f[j]+s[i][i]-s[j][i];
}
inline bool judge(int j,int k,int i){ //判断 f[i] 大小
int valj=calc(j,i),valk=calc(k,i);
if(valj^valk) return valj>valk;
return w[j]>=w[k];
}
inline int rate(int j,int k){ //得到交点位置
int l=k+1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if(judge(j,k,mid)) r=mid-1;
else l=mid+1;
} return l;
}
inline bool check(int mid){ //二分附加权值
static int head,tail,q[M];
q[head=tail=1]=0;
fp(i,1,n){ //斜率优化
while(head<tail&&judge(q[head],q[head+1],i)) ++head;
f[i]=calc(q[head],i)+mid,w[i]=w[q[head]]+1;
while(head<tail&&rate(q[tail-1],q[tail])>rate(q[tail],i)) --tail; q[++tail]=i;
} return w[n]<=K;
}
int main(){ n=read(),K=read();
fp(i,1,n) fp(j,1,n) s[i][j]=read();
fp(i,1,n) fp(j,1,i) s[i][j]=0;
fp(i,1,n) fp(j,1,n) s[i][j]=s[i][j-1]+s[i][j];
fp(i,1,n) fp(j,1,n) s[i][j]=s[i-1][j]+s[i][j];
int l=0,r=s[n][n];
while(l<=r){ int mid=(l+r)>>1;
if(check(mid)) r=mid-1,ans=f[n]-K*mid;
else l=mid+1;
} return !printf("%d\n",ans);
}

【CF321E】+【bzoj5311】贞鱼的更多相关文章

  1. 【BZOJ5311/CF321E】贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性)

    [BZOJ5311/CF321E]贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性) 题面 BZOJ CF 洛谷 辣鸡BZOJ卡常数!!!!!! 辣鸡BZOJ卡常数!!!!!! ...

  2. [CF321E]Ciel and Gondolas&&[BZOJ5311]贞鱼

    codeforces bzoj description 有\(n\)个人要坐\(k\)辆车.如果第\(i\)个人和第\(j\)个人同坐一辆车,就会产生\(w_{i,j}\)的代价. 求最小化代价.\( ...

  3. BZOJ5311 贞鱼(动态规划+wqs二分+决策单调性)

    大胆猜想答案随k变化是凸函数,且有决策单调性即可.去粘了份fread快读板子才过. #include<iostream> #include<cstdio> #include&l ...

  4. bzoj5311: 贞鱼

    还是年轻啊算的时候少乘一个4000被卡二分上界了...%%%%bright教我超级快速读D飞bzoj垃圾卡常数据 我们容易写出这样的DP方程:f[i][j]=f[k][j-1]+val(k+1,j) ...

  5. BZOJ5311,CF321E 贞鱼

    题意 Problem 5311. -- 贞鱼 5311: 贞鱼 Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 677  Solved: 150[Subm ...

  6. ROJ 1166 超级贞鱼

    1166: 超级贞鱼 Time Limit: 1 Sec  Memory Limit: 128 MB [Submit][Status] 传送门 Description 马达加斯加贞鱼是一种神奇的双脚贞 ...

  7. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

  8. bzoj 4769: 超级贞鱼 -- 归并排序

    4769: 超级贞鱼 Time Limit: 1 Sec  Memory Limit: 128 MB Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的 ...

  9. 【BZOJ4769】超级贞鱼 归并排序求逆序对

    [BZOJ4769]超级贞鱼 Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的左脚和右脚上各有一个数.有一天,K只贞鱼兴致来潮,排成一列,从左到右第i ...

  10. 贞鱼传教&&贞鱼传教(数据加强版)

    http://acm.buaa.edu.cn/problem/1381/ 贞鱼传教[问题描述] 新的一年到来了,贞鱼哥决定到世界各地传授“贞教”,他想让“贞教”在2016年成为世界第四大宗教.说干就干 ...

随机推荐

  1. 【牛客Wannafly挑战赛23】F 计数

    题目链接 题意 给定一张边带权的无向图,求生成树的权值和是 k 的倍数的生成树个数模 p 的值. \(n\leq 100,k\leq 100,p\mod k=1\) Sol 看见整除然后 \(p\mo ...

  2. 决策树剪枝算法-悲观剪枝算法(PEP)

    前言 在机器学习经典算法中,决策树算法的重要性想必大家都是知道的.不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确 ...

  3. CSS盒模型面试知识点

    一.基本概念 1.基本概念:标准盒模型+怪异盒模型(IE模型) 基本组成:由margin.padding.content组成. 2.标准盒模型和IE模型的区别 标准盒模型中width指的是内容区域co ...

  4. mysql 语句积累

    show tables; 显示表 DROP TABLE IF EXISTS emp;删除表

  5. BZOJ 2427: [HAOI2010]软件安装 tarjan + 树形背包

    Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...

  6. BFC、IFC、GFC和FFC

    基本概念 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个Box 组成的.元素的类型和 display 属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不 ...

  7. Solr单机环境搭建及部署

    一.定义 官网的定义: Solr是基于Lucene构建的流行,快速,开放源代码的企业搜索平台.它具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平衡查询,自动故障转移和恢复,集中式配 ...

  8. Android传感器系统架构【转】

    本文转载自:http://blog.csdn.net/qianjin0703/article/details/5942579 版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 体系结构 2. ...

  9. Fragment 基础使用及重叠问题

    一 基本使用 Fragment依附于Activity使用,方面我们在一个页面里面切换显示多屏内容. Activity管理Fragment有两种方式,通过FragmentTransacation这个类来 ...

  10. JDBC 查询mysql数据库比客户端工具慢的解决办法

    在URL链接参数中配置rewriteBatchedStatements.useServerPrepStmts为true url="jdbc:mysql://****/dbName?useSS ...