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

题面

BZOJ

CF

洛谷

辣鸡BZOJ卡常数!!!!!!

辣鸡BZOJ卡常数!!!!!!

辣鸡BZOJ卡常数!!!!!!

所以我程序在BZOJ过不了

题解

朴素的按照\(k\)划分阶段的\(dp\)可以在\(CF\)上过的。

发现当选择的\(k\)增长时,减少的代价也越来越少,

所以可以凸优化一下,这样复杂度少个\(k\)

变成了\(O(nlogw)\)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define MAX 4040
  10. #define double int
  11. inline int read()
  12. {
  13. int x=0;bool t=false;char ch=getchar();
  14. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  15. if(ch=='-')t=true,ch=getchar();
  16. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  17. return t?-x:x;
  18. }
  19. struct Node{int x,l,r;}Q[MAX];
  20. int h,t;
  21. int n,K,s[MAX][MAX];
  22. int f[MAX],g[MAX];
  23. int Trans(int i,int j,int C){return f[j]+(s[j][j]-s[i][j]*2+s[i][i])/2+C;}
  24. void calc(int C)
  25. {
  26. f[0]=g[0]=h=0;Q[h=t=1]=(Node){0,1,n};
  27. for(int i=1;i<=n;++i)
  28. {
  29. while(h<t&&Q[h].r<i)++h;
  30. f[i]=Trans(i,Q[h].x,C);g[i]=g[Q[h].x]+1;
  31. while(h<t&&i>=Q[h].r)++h;
  32. if(Trans(n,Q[t].x,C)<=Trans(n,i,C))continue;
  33. while(h<t&&Trans(Q[t].l,Q[t].x,C)>Trans(Q[t].l,i,C))--t;
  34. int l=Q[t].l,r=Q[t].r,ret=Q[t].r+1;
  35. while(l<=r)
  36. {
  37. int mid=(l+r)>>1;
  38. if(Trans(mid,i,C)<Trans(mid,Q[t].x,C))ret=mid,r=mid-1;
  39. else l=mid+1;
  40. }
  41. if(ret>n)continue;
  42. Q[t].r=ret-1;Q[++t]=(Node){i,ret,n};
  43. }
  44. }
  45. int main()
  46. {
  47. n=read();K=read();
  48. for(int i=1;i<=n;++i)
  49. for(int j=1;j<=n;++j)
  50. s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+read();
  51. int l=0,r=s[n][n],ans=1e9;
  52. while(l<=r)
  53. {
  54. int mid=(l+r)>>1;
  55. calc(mid);
  56. if(g[n]>K)l=mid+1;
  57. else r=mid-1,ans=f[n]-K*mid;
  58. }
  59. cout<<ans<<endl;
  60. return 0;
  61. }

【BZOJ5311/CF321E】贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性)的更多相关文章

  1. BZOJ5311,CF321E 贞鱼

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

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

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

  3. 【CF321E】+【bzoj5311】贞鱼

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

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

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

  5. CF321E Ciel and Gondolas

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

  6. 【wqs二分 || 决策单调性】cf321E. Ciel and Gondolas

    把状态看成层,每层决策单调性处理 题目描述 题目大意 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半.这不?他们遇到了大麻烦!n只贞鱼到陆地上乘车,现在有k辆汽车可以租用.由于贞鱼们 ...

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

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

  8. ROJ 1166 超级贞鱼

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

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

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

随机推荐

  1. docker run 和docker start的区别

    docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可. docker run相当于执行了两步操作:将镜像放入容器中(doc ...

  2. maven scope属性值设置含义

    1.枚举各个属性值的含义 compile,缺省值,适用于所有阶段,会打包进项目. provided,类似compile,期望JDK.容器或使用者会提供这个依赖. runtime,只在运行时使用,如JD ...

  3. oozie捕获标准输出&异常capture-output

    对于普通的java-action或者shell-action 都是支持的只要标准输出是"k1=v1"这中格式的就行: 现用test.py进行测试: ##test.py #! /op ...

  4. Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程

    Netty源码分析第五章: ByteBuf 第十节: SocketChannel读取数据过程 我们第三章分析过客户端接入的流程, 这一小节带大家剖析客户端发送数据, Server读取数据的流程: 首先 ...

  5. mysql innodb 从 ibd 文件恢复表数据

    最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

  6. MySQL基础练习(三)

    经过之前两次的学习,这次用MySQL进行略微复杂的操作练习 各部门工资最高的员工 首先创建表employee和表department.如下 我们需要查询每个部门工资最高的员工 select a.Nam ...

  7. Ruby知识点一:方法

    1.实例方法 接收者是对象本身的方法 2.类方法 接收者是类本身的方法,调用类方法时,可以使用::或者.两个符号. 类名.方法名 类名::方法名 3.函数式方法 没有接收者(接收者省略而已)的方法 4 ...

  8. linq与lambda 常用查询语句写法对比

    LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] Lambda ...

  9. Xiuno BBS 4.0 修改时间显示

    修罗开源轻论坛程序 - Xiuno BBS 4.0Xiuno BBS 4.0 是一款轻论坛产品,前端基于 BootStrap 4.0.JQuery 3,后端基于 PHP/7 MySQL XCache/ ...

  10. 使你的WebService可以远程调试点击“调用”

    默认发布webservice时,只有在本机访问某个方法时可以点击调用,如果有参数时,也可以输入参数值,但是如果是远程访问时,点击进入一个服务时,是不显示“调用”和输入参数框的. 原来web.confi ...