决策单调性 + WQS二分

贴个代码先...

//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);
}

最新文章

  1. 枚举扩展方法获取枚举Description
  2. 【小白的CFD之旅】01 引子
  3. 关于eclipse的一些配置
  4. asp.net 生成 excel导出保存时, 解决迅雷下载aspx页面问题
  5. Android Studio通过JNI调用NDK程序
  6. ThinkPHP中pathinfo模式与URL重写
  7. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:刘耀先-11061183,罗凡-11061174
  8. 俄罗斯方块:win32api开发
  9. C# 3.0 { get; set; } 默认值
  10. 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础
  11. C#中Dictionary的用法
  12. 解决NSTimer循环引用Retain Cycle问题
  13. 跟着小菜学习RabbitMQ启动和基础(系列一)
  14. 2019春第八周作业Compile Summarize
  15. [USACO07OPEN]便宜的回文Cheapest Palindrome
  16. 将连接数据库的JDBC提成BaseDao
  17. day12 函数的使用方法:初识迭代器和生成器
  18. linux系统常用的基本命令分类
  19. 【Python深入】Python中继承object和不继承object的区别
  20. vue2+animate.css

热门文章

  1. window.open()的实际应用
  2. darknet-yolov3模型预测框size不正确的原因
  3. vi set the tab width for python
  4. Eclipse设置类和方法的注释模板
  5. 【BZOJ1132】Tro(叉积)
  6. Android CPU使用率:top和dump cpuinfo的不同
  7. JMH简介
  8. android 后台运行service实现和后台的持续交互
  9. SpringMVC传参注解@RequestParam,@RequestBody,@ResponseBody,@ModelAttribute
  10. Redis实现存取数据+数据存取