把状态看成层,每层决策单调性处理

题目描述

题目大意

众所周知,贞鱼是一种高智商水生动物。不过他们到了陆地上智商会减半。
这不?他们遇到了大麻烦!
n只贞鱼到陆地上乘车,现在有k辆汽车可以租用。
由于贞鱼们并不能在陆地上自由行走,一辆车只能载一段连续的贞鱼。
贞鱼们互相有着深深的怨念,每一对贞鱼之间有怨气值。
第i只贞鱼与第j只贞鱼的怨气值记为Yij,且Yij=Yji,Yii=0。
每辆车载重不限,但是每一对在同辆车中的贞鱼都会产生怨气值。
当然,超级贞鱼zzp长者希望怨气值的总和最小。
不过他智商已经减半,想不出分配方案。
他现在找到了你,请你帮助他分配贞鱼们,并输出最小怨气值之和ans。
n<=4000,1 ≤ k ≤min(n , 800)


题目分析

做法一:wqs二分

这个题第一眼就像是wqs二分,并且答案函数的确是一个凸函数的形状。

于是首先是个wqs二分的模板题。

 #include<bits/stdc++.h>
typedef long long ll;
const int maxn = ;
const int INF = 0x3f3f3f3f; int n,k,L,R;
ll a[maxn][maxn],g[maxn][maxn],f[maxn],h[maxn],ans; char tc(){static char tr[],*A=tr,*B=tr;return A==B&&(B=(A=tr)+fread(tr,,,stdin),A==B)?EOF:*A++;}
#define getchar tc
int read()
{
char ch = getchar();
int num = , fl = ;
for (; !isdigit(ch); ch=getchar())
if (ch=='-') fl = -;
for (; isdigit(ch); ch=getchar())
num = (num<<)+(num<<)+ch-;
return num*fl;
}
ll check(int w)
{
memset(f, 0x3f3f3f3f, sizeof f);
memset(h, 0x3f3f3f3f, sizeof h);
f[] = h[] = ;
for (int i=; i<=n; i++)
for (int j=; j<i; j++)
if (f[i] > f[j]+g[j+][i]+w||(f[i]==f[j]+g[j+][i]+w&&h[j]+ < h[i])){
f[i] = f[j]+g[j+][i]+w, h[i] = h[j]+;
}
if (h[n] <= k) ans = f[n]-k*w;
return h[n];
}
int main()
{
n = read(), k = read();
for (int i=; i<=n; i++)
for (int j=; j<=n; j++) a[i][j] = read();
for (int i=n; i>=; i--)
for (int j=i; j<=n; j++)
g[i][j] = g[i+][j]+g[i][j-]-g[i+][j-]+a[i][j];
ans = INF, L = , R = g[][n];
for (int mid=(L+R)>>; L<=R; mid=(L+R)>>)
if (check(mid) <= k) R = mid-;
else L = mid+;
printf("%lld\n",ans);
return ;
}

做法二:决策单调性

$n^2$dp是$f[j][i]$表示前$i$个鱼分为$j$组的最小代价。对于每一个同样的$j$,其转移是具有单调性的。那就是说把$i$视作层,剩下的就是层之间的转移。

暂时还没写。

END

【wqs二分 || 决策单调性】cf321E. Ciel and Gondolas的更多相关文章

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

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

  2. 【wqs二分 决策单调性】HHHOJ#261. Brew

    第一道决策单调性…… 题目描述 HHHOJ#261. Brew 题目分析 挺好的……模板题? 寄存了先. #include<bits/stdc++.h> typedef long long ...

  3. CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性

    LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...

  4. CF321E Ciel and Gondolas 【决策单调性dp】

    题目链接 CF321E 题解 题意:将\(n\)个人分成\(K\)段,每段的人两两之间产生代价,求最小代价和 容易设\(f[k][i]\)表示前\(i\)个人分成\(k\)段的最小代价和 设\(val ...

  5. CF321E Ciel and Gondolas & BZOJ 5311 贞鱼

    一眼可以看出$O(kn^{2})$的$dp$方程,然后就不会了呜呜呜. 设$f_{i, j}$表示已经选到了第$i + 1$个数并且选了$j$段的最小代价,那么 $f_{i, j} = f_{p, j ...

  6. CF321E Ciel and Gondolas

    题意:给定序列,将其分成k段.如果[l, r]在一段,那么每对不相同的i,j∈[l, r]都会有ai,j的代价.求最小总代价. 解:提供两种方案.第三种去bzoj贞鱼的n²算法. 决策单调性优化: 对 ...

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

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

  8. P3515-[POI2011]Lightning Conductor【整体二分,决策单调性】

    正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 \(n\)个数字的一个序列\(a\),对于每个位置\(i\)求一个\(p_i\)使得对于任意\( ...

  9. 决策单调性&wqs二分

    其实是一个还算 trivial 的知识点吧--早在 2019 年我就接触过了,然鹅当时由于没认真学并没有把自己学懂,故今复学之( 1. 决策单调性 引入:在求解 DP 问题的过程中我们常常遇到这样的问 ...

随机推荐

  1. Linux 安装 openoffice

    1 说明 本文档采用rpm包方式安装,操作系统为centos 2 下载openoffice rpm包 创建nginx源码包存放目录 mkdir /usr/local/src/openoffice cd ...

  2. linux内核开源代码地址下载

    https://www.kernel.org/pub/linux/kernel/v2.6/

  3. [转帖]SSL延迟有多大?

    SSL延迟有多大? http://www.ruanyifeng.com/blog/2014/09/ssl-latency.html 转帖 作者: 阮一峰 日期: 2014年9月24日 感谢 腾讯课堂N ...

  4. .NET 表达式计算:Expression Evaluator

    Expression Evaluator 是一个轻量级的可以在运行时解析C#表达式的开源免费组件.表达式求值应该在很多地方使用,例如一些工资或者成本核算系统,就需要在后台动态配置计算表达式,从而进行计 ...

  5. Netty的那些”锁”事

    Netty锁事的五个关键点: ① 在意锁的对象和范围  --> 减少粒度 ②  注意锁的对象本身大小   --> 减少空间占用 ③ 注意锁的速度 --> 提高速度 ④不同场景选择不同 ...

  6. VC/MFC 进程间通信方法总结

    摘   要   随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进程 / 多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的. M ...

  7. 【动态规划】subsequence 1

    题目链接:https://ac.nowcoder.com/acm/contest/885/G 题意: 两个串,s  t,求s的所有子串中大于 t  的数目 题解: dp[i][j] 表示 s的前i个, ...

  8. Web前端开发JavaScript基础

    JavaScript 一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,它的解释器被称为JavaScript引擎,是浏览器的一部分,并且是被广泛用于客户端的脚本语言,JavaS ...

  9. Springboot使用javaMail进行邮件发送

    导入相关依赖 <!--邮件发送--> <dependency> <groupId>javax.mail</groupId> <artifactId ...

  10. 13-Perl 子程序(函数)

    1.Perl 子程序(函数)Perl 子程序也就是用户定义的函数.Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读.Perl 子程序可以出现在程序的任何地方,语法格 ...