暂无连接

Lyk Love painting

【题目描述】

lyk有一块神奇的画布,呈2*n的格子状。lyk现在想在画布上画m幅画,每幅画必须是矩形。为了充分利用画布,画布上的每一个格子都必须属于某一幅画。

每一个格子都有一个魅力值,一幅画的魅力值为其所包含的格子的魅力值的总和。为了不过于展现自己的才华lyk希望这m幅画魅力值的最大值最小。然而他并不知道如何作画才能达到要求,请你帮帮他吧。

【输入】

第一行两个数n,m

第2、第3行每行n个数,表示每个格子的魅力值

【输出】

仅包含一个整数,为最优方案中最大的魅力值最小可能为多少。

【输入样例】

3 3
1 3 2
1 3 2

【输出样例】

4

【提示】
【数据范围】

对于30%的数据,n ≤ 150, m ≤ 30

对于60%的数据,n ≤ 500, m ≤ 50

对于80%的数据,n ≤ 2000, m ≤ 100

对于100%的数据,n ≤ 100000, m ≤ 100

题解

表示只会303030分暴力,我太菜了

虽然说最大值最小一下就能想到二分,但是当时死活想不出来怎么checkcheckcheck,然后GGGGGG。。。

实际上,我们可以考虑对于一个二分值mxmxmx,询问是否存在一种划分使得整个矩形分为不多于mmm块且最大值不超过mx" role="presentation" style="position: relative;">mxmxmx。

自然想到暴力中的用dp[i][j]dp[i][j]dp[i][j]来表示当划分到第一行第iii列,第二行第j" role="presentation" style="position: relative;">jjj列时最少需要分为多少块,但是注意到n≤105n≤105n\le 10^5,只能开下一维来表示当前划分,于是我们只好用dp[i]dp[i]dp[i]来表示前iii列最少需要划分为多少块。

有一个小小的贪心,每次我们划分出的矩形要尽量大,但是权值和又不能超过mx" role="presentation" style="position: relative;">mxmxmx。所以,我们预处理出len[1][i]len[1][i]len[1][i]表示以第一行第iii列的方块为结尾宽度为1" role="presentation" style="position: relative;">111且权值和不大于mxmxmx的矩形最小的起点列数,同理len[2][i]len[2][i]len[2][i]表示第二行第iii列的方块为结尾宽度为1" role="presentation" style="position: relative;">111且权值和不大于mxmxmx的矩形最小的起点列数,len[3][i]len[3][i]len[3][i]则表示以第iii列结尾宽度为2" role="presentation" style="position: relative;">222且权值和不大于mxmxmx的矩形最小的起点列数。

处理出上面的数组后,就有了最简单的一个转移:dp[i]=min(dp[len[3][i]−1]+1,dp[i])dp[i]=min(dp[len[3][i]−1]+1,dp[i])dp[i]=min(dp[len[3][i]-1]+1,dp[i]),当然这个转移只讨论了宽为222的情况,在两个宽为2" role="presentation" style="position: relative;">222的矩形中间还可以填充各式各样的宽度为111的矩形,我们依旧采用贪心策略,每次都填左端点列数较大的矩形来进行转移。

这样,由于每个点最多跳m" role="presentation" style="position: relative;">mmm次,所以总复杂度为O(nmlog2(∑val))O(nmlog2(∑val))O(nmlog_2(\sum val))。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=1e5+5;
int val[3][M],dp[M],len[4][M],n,m,i,j,pre,f1,f2,cot,maxn,sum;
bool check(int mx)
{memset(dp,127,sizeof(dp));dp[0]=0;for(j=1;j<=2;++j)for(i=pre=1,sum=0;i<=n;++i){sum+=val[j][i];for(;sum>mx;sum-=val[j][pre++]);len[j][i]=pre;}for(sum=0,pre=i=1;i<=n;++i){sum+=val[1][i]+val[2][i];for(;sum>mx;sum-=val[1][pre]+val[2][pre++]);len[3][i]=pre;}for(i=1;i<=n;++i){for(f1=f2=i,cot=0;f1>0&&f2>0&&cot<=m;){if(len[1][f1]>len[2][f2])f1=len[1][f1]-1,++cot;else if(len[1][f1]<len[2][f2])f2=len[2][f2]-1,++cot;else f1=f2=len[1][f1]-1,cot+=2;dp[i]=min(dp[i],dp[max(f1,f2)]+cot);}dp[i]=min(dp[len[3][i]-1]+1,dp[i]);}return dp[n]<=m;
}
void in(){scanf("%d%d",&n,&m);for(int i=1;i<=2;++i)for(int j=1;j<=n;++j)scanf("%d",&val[i][j]),maxn=max(maxn,val[i][j]);}
void ac(){int le=maxn-1,ri=1e9,mid;while(le^ri){mid=le+ri>>1;check(mid)?ri=mid:le=mid+1;}printf("%d",le);}
int main(){in();ac();}

[2018.09.05 T1] Lyk Love painting相关推荐

  1. 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language

    老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...

  2. 2018.09.26朴素贝叶斯算法研究日志

    2018.09.26朴素贝叶斯算法研究日志 前些天研究的遗传算法遇到瓶颈,所以转而研究朴素贝叶斯,同时也让自己休息一下,多查询遗传算法的文档然后进一步研究.朴素贝叶斯算法是最简单的一种贝叶斯算法.本文 ...

  3. c3520 宝骏凯立德地图_凯立德2018车载导航地图-2018年05月凯立德高清优化版C2939-C7M05-3H21J22最新版 - 极光站...

    2018年05月凯立德高清优化版C2939-C7M05-3H21J22是凯立德2018车载导航地图!经常使用凯立德的,可以下载最新版本.3H21J22春季版,非常不错.在这里,小编为你提供懒人包百度网 ...

  4. 《OSChina每日一博》2018年05月整理合集

    <OSChina每日一博>2018年05月整理合集 简介 收录开源中国每日推荐的优秀博客文章,开源中国每日会推荐一篇比较优秀的博客文章,称之为每日一bo,文章实属精品,收藏于此,供自己慢慢 ...

  5. 菜鸟网络工程师的成长笔记——第19天(2016.09.05)

    菜鸟网络工程师的成长笔记--第19天(2016.09.05) 不知道要有多久的浸润,才能算是精通web全栈开发 30.前端的日期选择插件 问题类型:前端 解决状态:已解决 问题描述 日期选择是web上 ...

  6. 导航狗IT周报-2018年05月18日

    原文链接:https://www.daohanggou.cn/2018/05/18/it-weekly-8/ DDoS专题 最近Web安全里的一个热点就是包括阮一峰博客在内的多个教育类IT网站被DDo ...

  7. 你或许不知道SDP 但它能改变IaaS安全现状 - 2017.09.05

    你或许不知道SDP 但它能改变IaaS安全现状 2017年09月05日发布于聚盟科技 博客地址: http://blog.nsfocus.net/sdp-iaas/

  8. 2018.09.24-2018.09.30

    Linux上的文件管理命令都有哪些,其常用的使用方法及其相关示例演示 2.bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例展示 3,使用命令行展开功能来完成以下练习 4,文件的元 ...

  9. 2018.09.16模拟总结

    嗯,提前声明一下,这三道题的正解我现在一个写不出来,顶多T2懂一个思路--于是我就谈谈题解之外的事儿吧. 首先花了15分钟看完题. T1起手10分钟O(n3)30分暴力很开心.直接跳T2.T2连暴力都 ...

  10. ACM赛后总结2018.09.23

    昨天 2018的acm网络赛就告辞一段落了 听着罗老师的建议,要赛后进行总结,昨天那一场北京场还有点记忆,就来写写感受,顺便写写这一个星期遇到的难题 昨天打的是训练赛,和hhr和zcy组队,一开始zc ...

最新文章

  1. 【万里征程——Windows App开发】DatePickerFlyout、TimePickerFlyout的使用
  2. Citus中的分片策略:Append Distribution追加分配
  3. Spark与Flink:对比与分析
  4. oracle高资源消耗sql,oracle 中如何定位重要(消耗资源多)的SQL
  5. 加载中_GIS地图在项目中的加载显示
  6. 使用 Grafana+collectd+InfluxDB 打造现代监控系统
  7. 传输层的端口与TCP标志中的URG和PSH位
  8. GM8285C是一颗将TTL信号转换成单路LVDS信号的转接芯片
  9. Latex VS Code 编辑中文Latex乱码——详细解决方案操作流程
  10. 22年QQ号被盗,好友协助验证却申诉无效
  11. Hihocoder 顺子
  12. 【Qt】Qt 官方下载网址
  13. 小程序普通选择器的创建详解(我的成长之路_No.2)
  14. 隐空间与高斯超球面相关概念
  15. Istio 架构简单说明
  16. 基于滑模控制的PMSM直接转矩控制仿真模型
  17. mysql连接字符串db2_ADO.NET入门教程(三) 连接字符串,你小觑了吗?
  18. 书籍《脆弱的繁华》读后感
  19. RHCSA_8、容器管理,podman
  20. 【TCP/IP网络协议】(五)传输层UDP协议

热门文章

  1. 计算机维护记录软件,《企业计算机软件故障维护记录》(4页)-原创力文档
  2. PathProber:基于暴力破解方法探测和发现HTTP路径名
  3. 如何发现隐藏的Webshell后门
  4. scrapy-cluster scrapy集群建设
  5. Java集合笔记,实用!!
  6. php改时间戳,如何实现转换php时间戳
  7. FL2440-学习记录(三)
  8. Spring入门第六课
  9. equals方法的小结
  10. BZOJ 2761: [JLOI2011]不重复数字( )