贞鱼

众所周知,贞鱼是一种高智商水生动物。不过他们到了陆地上智商会减半。这不?他们遇到了大麻烦!

n只贞鱼到陆地上乘车,现在有k辆汽车可以租用。由于贞鱼们并不能在陆地上自由行走,一辆车只能载一段连续的贞鱼。

贞鱼们互相有着深深的怨念,每一对贞鱼之间有怨气值。第i只贞鱼与第j只贞鱼的怨气值记为Yij,且Yij=Yji,Yii=0。每辆车载重不限,但是每一对在同辆车中的贞鱼都会产生怨气值。

当然,超级贞鱼zzp长者希望怨气值的总和最小。不过他智商已经减半,想不出分配方案。他现在找到了你,请你帮助他分配贞鱼们,并输出最小怨气值之和ans。

1 ≤ n ≤4000 ,1 ≤ k ≤min(n , 800) , 0 ≤ Yij≤10

分析

显然每条鱼坐一辆车最优,代价为0。考虑二分一个权值,表示这辆车的价钱为C。如果C=0,就会选出n辆车,如果C=inf,就会只用一辆车。于是用这个权值逼近,直到选出刚好K辆车。此时选择的方案一定为最优解的一种方案。

DP方程:

\[F[i]=\min_{0\le j<i}\{F[j]+(s[i][i]+s[j][j]-s[i][j]*2)/2+C\}
\]

考虑题目中所给的那个两条鱼之间的代价,发现就是一个正方形数组里面在主对角线上选一个正方形求和。用二维前缀和维护即可。并且易证这个转移满足四边形不等式。

凸优化+决策单调性优化,时间复杂度\(O(n\log n\log w)\)


这个决策单调性优化有毒……换了一种维护版本才过的。并且二分后--l是什么操作……

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
rg T data=0,w=1;rg char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') w=-1;ch=getchar();}
while(isdigit(ch)) data=data*10+ch-'0',ch=getchar();
return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll;
using namespace std; co int N=4001,INF=0x3f3f3f3f;
int n,K,s[N][N],g[N],f[N],C;
il int val(int j,int i){
return j<i?f[j]+(s[i][i]+s[j][j]-s[i][j]*2)/2+C:INF;
}
struct Q{int x,l,r;}q[N];
int L,R;
void insert(int i){
int w=-1;
while(L<=R){
if(val(i,q[R].l)<=val(q[R].x,q[R].l)) w=q[R--].l;
else{
if(val(q[R].x,q[R].r)>val(i,q[R].r)){
int l=q[R].l,r=q[R].r;
while(l<r){
int mid=l+r>>1;
if(val(i,mid)>val(q[R].x,mid)) l=mid+1;
else r=mid;
}
q[R].r=l-1,w=l;
}
break;
}
}
if(w!=-1) q[++R]=(Q){i,w,n};
}
void dp(){
L=R=0,q[0]=(Q){0,1,n};
for(int i=1;i<=n;++i){
while(L<=R&&q[L].r<i) ++L;
f[i]=val(q[L].x,i),g[i]=g[q[L].x]+1;
q[L].l=i+1;
insert(i);
}
}
int main(){
read(n),read(K);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j) s[i][j]=read<int>()+s[i][j-1]+s[i-1][j]-s[i-1][j-1];
int l=0,r=s[n][n];
while(l<r){
C=l+r>>1,dp();
if(g[n]>K) l=C+1;
else r=C;
}
C=l,dp();
printf("%d\n",f[n]-g[n]*C);
return 0;
}

BZOJ5311,CF321E 贞鱼的更多相关文章

  1. 【CF321E】+【bzoj5311】贞鱼

    决策单调性 + WQS二分 我们首先列出转移式: \(f[i]=Min(f[j]+Sum[j+1 , i])\) 首先我们考虑如果让一段区间的小鱼在一起的代价怎么预处理,我们可以对于一个上三角矩阵求个 ...

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

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

  3. ROJ 1166 超级贞鱼

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

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

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

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

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

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

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

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

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

  8. BZOJ_5311_贞鱼_决策单调性+带权二分

    BZOJ_5311_贞鱼_决策单调性+带权二分 Description 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半. 这不?他们遇到了大麻烦! n只贞鱼到陆地上乘车,现在有k辆汽 ...

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

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

随机推荐

  1. Linux磁盘故障案例

    原因:由于另外一块磁盘不存在,但是配置文件/etc/fstab中又有挂载的配置,挂载出问题就导致这样的故障. 输入root密码进去 编辑/etc/fstab文件把箭头指向的这一行注释掉或者删除掉.然后 ...

  2. dict的几个要点

    1. 采用key,value键-值对进行存储 2. key必须是不可变对象 3. key值不能重复 添加元素: aDict = {'1':'aaa','b':'bbb','3':'ccc'} aDic ...

  3. 关于“load”方法

    load是一个方法,在程序文件中,只有ruby遇到它的时候才会执行.Ruby不会搜索整个文件去执行load命令.也就是说,当Ruby解释器遇到它的时候,它才会去寻找它要加载的文件.这意味着需要加载的文 ...

  4. 微信小程序 画布drawImage实现图片截取

    大多数图片都大小不一,选择框的尺寸也是宽高相等的,就会有图片被压缩 解决方法: 1.可以使用画布对图片先进行截取,保存截取图片(用户自己选取,或者指定图片中心区域截取),但是对于多张图片手动截取,会影 ...

  5. 20165214 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 Week5

    <网络对抗技术>Exp3 免杀原理与实践 Week5 一.实验内容 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shell ...

  6. session_id() , session_start(), $_SESSION["userId"], header("Location:homeLogin.php"); exit 如果没有登录, 就回登录页

    if(!session_id()) session_start(); header("Content-type:text/html;charset=utf-8"); if (emp ...

  7. 黑客常用dos-cmd命令

    黑客常用命令大全net user heibai lovechina /add 加一个heibai的用户密码为lovechina net localgroup Administrators heibai ...

  8. python--基本数据 类型

    数据就是我们变量的值:python中变量保存的是内存地址 变量必须先赋值或者声明才能使用!! 1.数值型 整型 int (python3中int就是长整型,与python2中int不同,另外,pyth ...

  9. react native onEndReached频繁多次调用问题

    今天被这个问题搞得头疼,写一个分页加载,但是listview的onEndReached方法老是被频繁调用,知道加载完所有的分页数据才停止. <ListView automaticallyAdju ...

  10. python中shelve模块的使用

    import shelve # 将序列化文件操作dump与load进行封装,写入文件的内容就是个大的字符串字典 s_dic = shelve.open("text/b.txt",w ...