题目

分析

毫无疑问 \(dp\)

设 \(f_{i,j}\) 表示选到第 \(i\) 层,已选 \(j\) 个矩阵最大覆盖面积

那么 \(f_{i,j}=\max{f_{l,j}+w_i*(i-l)}\)

显然斜率优化

\(Code\)

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL; int n , k , q[20005];
LL f[20005][105];
struct node{
int x , y , w;
}p[20005]; double slope(int j , int l , int r)
{
return 1.0 * (f[l][j] - f[r][j]) / (l - r);
} int main()
{
freopen("pyramid.in" , "r" , stdin);
freopen("pyramid.out" , "w" , stdout);
scanf("%d%d" , &n , &k);
for(register int i = 1; i <= n; i++)
scanf("%d%d" , &p[i].x , &p[i].y) , p[i].w = p[i].y - p[i].x + 1;
int h , t;
for(register int j = 1; j <= k; j++)
{
h = t = 1;
for(register int i = 1; i <= n; i++)
{
while (h < t && slope(j - 1 , q[h + 1] , q[h]) > p[i].w) h++;
f[i][j] = f[q[h]][j - 1] + 1LL * p[i].w * (i - q[h]);
while (h <= t && slope(j - 1 , q[t] , q[t - 1]) < slope(j - 1 , i , q[t])) t--;
q[++t] = i;
}
}
LL ans = 0;
for(register int i = 1; i <= n; i++) ans = max(ans , f[i][k]);
printf("%lld" , ans);
}

最新文章

  1. 细谈Slick(5)- 学习体会和将来实际应用的一些想法
  2. Python使用QRCode模块生成二维码
  3. Nginx 笔记与总结(11)Nginx + php-fpm + MySQL 安装 ecshop
  4. 关于Memo或者Edit之类控件, 直接设置Text无法撤销的解决方案
  5. HTML--内联元素与块级元素
  6. [iOS 开发]UITableView第一行显示不完全
  7. 关于promise
  8. 第一次使用cnblogs
  9. python 保障系统(一)
  10. java的制作&quot;时间账本&quot;
  11. sql server 一直提示正在还原
  12. Log.isLoggable之一正确的使用姿势
  13. Flack--SQLAlchemy
  14. Web API中的Help Page
  15. JsonCpp 判断 value 中是否有某个KEY
  16. Tomcat学习(二)------Tomcat原理详解及请求过程
  17. HBase入门基础教程之单机模式与伪分布式模式安装(转)
  18. TotalCommander使用方法,如何对图片批量重命名
  19. C++ 数据封装
  20. 【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义

热门文章

  1. SSH(六)hibernate持久层模板于事务管理
  2. 14 STL-常用算法
  3. 腾讯云数据库SaaS致力于构建数据库分布式云,为更多更广的用户提供服务
  4. 社论 22.10.14 区间在线去重k小
  5. bug处理记录:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512M; support was removed in 8.0
  6. 如何通过C#合并Word文档?
  7. (admin.E104) &#39;XXXX&#39; must inherit from &#39;InlineModelAdmin&#39;.
  8. 通过GitHub和阿里云自定义域名实现https认证
  9. DP经典例题——LIS&amp;LCS
  10. vue3 递归组件 树形组件