[CF321E]Ciel and Gondolas&&[BZOJ5311]贞鱼
description
有\(n\)个人要坐\(k\)辆车。如果第\(i\)个人和第\(j\)个人同坐一辆车,就会产生\(w_{i,j}\)的代价。
求最小化代价。\(n\le4000\)
sol
凸优化+决策单调性优化
这么一讲其实这题就已经做完了,复杂度\(O(n\log n\log w)\)
code
\(bzoj\)上需要卡常。上网蒯个读入优化模板就行了。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gi(){
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 4005;
struct node{int j,l,r;}q[N];
int n,k,s[N][N],f[N],g[N],hd,tl;
int cal(int j,int i){
return f[j]+(s[i][i]-s[i][j]-s[j][i]+s[j][j]>>1);
}
bool better(int i,int j,int k){
int si=cal(i,k),sj=cal(j,k);
return si<sj||(si==sj&&g[i]<g[j]);
}
int binary(int i,int j){
int l=q[tl].l,r=n,res=0;
while (l<=r){
int mid=l+r>>1;
if (better(i,j,mid)) res=mid,r=mid-1;
else l=mid+1;
}
return res;
}
void solve(int c){
q[hd=tl=1]=(node){0,0,n};
for (int i=1;i<=n;++i){
++q[hd].l;if (q[hd].l>q[hd].r) ++hd;
f[i]=cal(q[hd].j,i)+c;g[i]=g[q[hd].j]+1;
if (hd>tl||better(i,q[tl].j,n)){
while (hd<=tl&&better(i,q[tl].j,q[tl].l)) --tl;
if (hd>tl) q[++tl]=(node){i,i,n};
else{
int x=binary(i,q[tl].j);
q[tl].r=x-1;q[++tl]=(node){i,x,n};
}
}
}
}
int main(){
n=gi();k=gi();
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+gi();
int l=0,r=s[n][n],res=0;
while (l<=r){
int mid=l+r>>1;solve(mid);
if (g[n]<=k) res=mid,r=mid-1;else l=mid+1;
}
solve(res);printf("%d\n",f[n]-k*res);return 0;
}
[CF321E]Ciel and Gondolas&&[BZOJ5311]贞鱼的更多相关文章
- CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性
LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...
- CF321E Ciel and Gondolas
题意:给定序列,将其分成k段.如果[l, r]在一段,那么每对不相同的i,j∈[l, r]都会有ai,j的代价.求最小总代价. 解:提供两种方案.第三种去bzoj贞鱼的n²算法. 决策单调性优化: 对 ...
- 【wqs二分 || 决策单调性】cf321E. Ciel and Gondolas
把状态看成层,每层决策单调性处理 题目描述 题目大意 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半.这不?他们遇到了大麻烦!n只贞鱼到陆地上乘车,现在有k辆汽车可以租用.由于贞鱼们 ...
- CF321E Ciel and Gondolas & BZOJ 5311 贞鱼
一眼可以看出$O(kn^{2})$的$dp$方程,然后就不会了呜呜呜. 设$f_{i, j}$表示已经选到了第$i + 1$个数并且选了$j$段的最小代价,那么 $f_{i, j} = f_{p, j ...
- BZOJ5311 贞鱼(动态规划+wqs二分+决策单调性)
大胆猜想答案随k变化是凸函数,且有决策单调性即可.去粘了份fread快读板子才过. #include<iostream> #include<cstdio> #include&l ...
- CF321E Ciel and Gondolas 【决策单调性dp】
题目链接 CF321E 题解 题意:将\(n\)个人分成\(K\)段,每段的人两两之间产生代价,求最小代价和 容易设\(f[k][i]\)表示前\(i\)个人分成\(k\)段的最小代价和 设\(val ...
- bzoj5311: 贞鱼
还是年轻啊算的时候少乘一个4000被卡二分上界了...%%%%bright教我超级快速读D飞bzoj垃圾卡常数据 我们容易写出这样的DP方程:f[i][j]=f[k][j-1]+val(k+1,j) ...
- 【BZOJ5311/CF321E】贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性)
[BZOJ5311/CF321E]贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性) 题面 BZOJ CF 洛谷 辣鸡BZOJ卡常数!!!!!! 辣鸡BZOJ卡常数!!!!!! ...
- BZOJ5311,CF321E 贞鱼
题意 Problem 5311. -- 贞鱼 5311: 贞鱼 Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 677 Solved: 150[Subm ...
随机推荐
- c#通过webrequest请求远程http服务时出现的问题
用WebRequest和WebClient,两种方式,请求一个由http服务发布的应用,结果出现异常. 有三种,1.System.Net.WebException: 服务器提交了协议冲突. Secti ...
- 20155239 2016-2017-2 《Java程序设计》第7周学习总结
教材学习内容总结 1.了解Lambda语言 "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的 ...
- ng-深度学习-课程笔记-4: 浅层神经网络(Week3)
1 神经网络概览( Neural Networks Overview ) 先来快速过一遍如何实现神经网络. 首先需要输入特征x,参数w和b,计算出z,然后用激活函数计算出a,在神经网络中我们要做多次这 ...
- http://www.kankanews.com/ICkengine/archives/18078.shtml
https://github.com/lealife/WeiXin-Private-API
- JFreeChart DateAxis用法
http://blog.csdn.net/xiaozhendong123/article/details/50131513
- 0510进程 multiprocess模块
process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. 创建模块 import os import time from multiprocessing import Proces ...
- Python面试题之Python中的类和实例
0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...
- 安装基础版的kinetic
没有gui工具 sudo apt-get install ros-kinetic-ros-base
- Lua中获取table长度
-- table.getn(tableName) 得到一个table的大小,等同于操作符# -- 要注意的是:该table的key必须是有序的,索引是从1开始的. --例如有序的 local xian ...
- vim 将文件从dos格式转换到unix格式
dos格式文件传输到unix系统时,会在每行的结尾多一个^M(/r),当然也有可能看不到.但是在vim的时候,会在下面显示此文件的格式,比如 "dos.txt" [dos] 120 ...