得分: \(20+45+15=80\)(三题暴力全写挂。。。)

\(T1\):Lyk Love painting

首先,不难想到二分答案然后\(DP\)验证。

设当前需验证的答案为\(x\),则一个暴力的想法就是设\(f_{i,j}\)表示在第一行选前\(i\)个数,第二行选前\(j\)个数使得每个矩形内元素和不超过\(x\)所需的最少矩形数

则我们可以预处理出三个数组\(lst_{1,i},lst_{2,i},lst_{3,i}\)来分别表示能使\(\sum_{j=lst_{1,i}}^ia_{1,i}\le x,\sum_{j=lst_{2,i}}^ia_{2,i}\le x,\sum_{j=lst_{3,i}}^ia_{1,i}+a_{2,i}\le x\)的最小值。

这样就不难推出转移方程为:

\[f_{i,j}=min(f_{lst_{1,i},j},f_{lst_{2,i},j},f_{lst_{3,i},lst_{3,j}})+1
\]

其中第三种转移需要满足条件\(i=j\)。

但这样显然会\(TLE\),因此需要优化。

考虑设\(f_i\)表示在第一行与第二行各选\(i\)个数使得每个矩形内元素和不超过\(x\)所需的最少矩形数

则一个显然的转移就是前面提到过的:

\[f_i=f_{lst_{3,i}}+1
\]

而还有一种转移有点复杂,却很好理解。

我们先初始化\(t_1=t_2=i\),分别表示第一行和第二行选择的元素个数。然后初始化\(tot=0\),用于存储步数。

则每次我们选择\(t_1\)与\(t_2\)中较大的那个(设它为\(t_x\),若相等则任选),然后把\(t_x\)更新为\(lst_{x,i}\),并将\(tot\)加\(1\)。

然后,我们就可以得到转移方程如下:

\[f_i=f_{max(t_1,t2)}+tot
\]

这应该正确性显然。

然后加一些小剪枝,例如\(t_1=t_2=0\)时直接退出,还有当\(f_i>m\)时直接返回\(false\)等等,就可过了。

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define RL Reg LL
#define Con const
#define CI Con int&
#define CL Con LL&
#define I inline
#define W while
#define N 100000
#define M 100
#define LL long long
#define Gmax(x,y) (x<(y)&&(x=(y)))
#define Gmin(x,y) (x>(y)&&(x=(y)))
#define Init(pos) for(i=1,p=0;i<=n;lst[pos][i++]=p) W(s[pos][i]-s[pos][p]>x) ++p;
using namespace std;
int n,m,lst[4][N+5],f[N+5];LL a[4][N+5],s[4][N+5];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
char c,*A,*B,FI[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
}F;
I bool Check(CL x)//DP验证答案正确性
{
RI i,j,k,p,t,t1,t2;f[0]=lst[1][0]=lst[2][0]=lst[3][0]=0;//初始化
Init(1)Init(2)Init(3)for(i=1;i<=n;++i)//Init预处理lst数组
{
f[t1=t2=i]=min(m,f[lst[3][i]])+1,t=0;//第一种转移
W(++t<=m&&(t1||t2)) (t1>t2?t1=lst[1][t1]:t2=lst[2][t2]),Gmin(f[i],f[max(t1,t2)]+t);//用t1和t2两个变量不断向前跳,更新答案
if(f[i]>m) return false;//如果f[i]已经大于m,返回false
}return true;
}
int main()
{
freopen("paint.in","r",stdin),freopen("paint.out","w",stdout);
RI i,j,Mx=0;RL res,STO,hl,ORZ;for(F.read(n,m),i=1;i<=2;++i) for(j=1;j<=n;++j) F.read(a[i][j]),s[i][j]=a[i][j]+s[i][j-1],Gmax(Mx,a[i][j]);//读入,初始化前缀和
for(i=1;i<=n;++i) a[3][i]=a[1][i]+a[2][i],s[3][i]=s[1][i]+s[2][i];//用a[3]记录下a[1]与a[2]的和,方便之后的操作
STO=Mx,ORZ=s[1][n]+s[2][n];W(STO<=ORZ) Check(hl=STO+ORZ+1>>1)?(res=hl,ORZ=hl-1):STO=hl+1;return printf("%lld",res),0;//二分答案
}

\(T2\): Lyk Love convex hull

一道神仙计算几何+\(DP\),压根不会订正。

\(T3\):Lyk Love music

一道挺有趣的神仙题,可惜看了题解还是云里雾里。。。

2019.03.15 ZJOI2019模拟赛 解题报告的更多相关文章

  1. 2019.03.19 ZJOI2019模拟赛 解题报告

    得分: \(100+10+45=155\)(\(T1\)又是水题,\(T2\)写暴力,\(T3\)大力\(STL\)乱搞) \(T1\):哈夫曼树 首先,根据题目中给出的式子,可以发现,我们要求的其实 ...

  2. 2019.03.13 ZJOI2019模拟赛 解题报告

    得分: \(55+12+10=77\)(\(T1\)误认为有可二分性,\(T2\)不小心把\(n\)开了\(char\),\(T3\)直接\(puts("0")\)水\(10\)分 ...

  3. 2019.03.14 ZJOI2019模拟赛 解题报告

    得分: \(100+100+0=200\)(\(T1\)在最后\(2\)分钟写了出来,\(T2\)在最后\(10\)分钟写了出来,反而\(T3\)写了\(4\)个小时爆\(0\)) \(T1\):风王 ...

  4. 2019.03.16 ZJOI2019模拟赛 解题报告

    得分: \(100+27+20=147\)(\(T1\)巨水,\(T2,T3\)只能写暴力分) \(T1\):深邃 比较套路的一眼题,显然是一个二分+贪心,感觉就是\(NOIP2018Day1T3\) ...

  5. 2019.03.02 ZJOI2019模拟赛 解题报告

    得分: \(10+0+40=50\)(\(T1\),\(T3\)只能写大暴力,\(T2\)压根不会) \(T1\):道路建造 应该是一道比较经典的容斥题,可惜比赛时没有看出来. 由于要求最后删一条边或 ...

  6. 2019.03.09 ZJOI2019模拟赛 解题报告

    得分: \(20+0+40=60\)(\(T1\)大暴力,\(T2\)分类讨论写挂,\(T3\)分类讨论\(40\)分) \(T1\):天空碎片 一道神仙数学题,貌似需要两次使用中国剩余定理. 反正不 ...

  7. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  8. 20201101gryz模拟赛解题报告

    写在前面 2020rp++ 停课的第一场模拟赛 拿上一年的上一年的day1来考的, 结果得分期望220pts,实际135pts,rank3,太菜了 考着考着机房灯突然灭了,当时慌的一批 以为断电代码要 ...

  9. 2018.10.26NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 70\) 实际得分:\(40 + 100 + 70\) 妈妈我又挂分了qwq..T1过了大样例就没管,直到临考试结束前\(10min\)才发现大样例是假 ...

随机推荐

  1. Doxygen生成美丽注释文档(1):初体验

    Chapter 1 - 准备工作 (Windows环境) 1.1 程序包下载 1. Doxygen * 源码: git clone https://github.com/doxygen/doxygen ...

  2. Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘

    img: 待检测的图像. threshold: 阈值,可先项,默认为10 line_length: 检测的最短线条长度,默认为50 line_gap: 线条间的最大间隙.增大这个值可以合并破碎的线条. ...

  3. ajax请求状态码为0的解决办法

    原文链接:https://blog.csdn.net/changqing5818/article/details/53932463 前言 今天遇到个奇怪的问题,使用JQuery的ajax请求,后台的C ...

  4. pgadmin-linux-centos7.3-连接pgsql

    每次远程连接linux-centos上面的pgsql的时候,需要修改ip,命令如下: -->cd /var/lib/pgsql/data -->vi pg_hba.conf 添加ip如下, ...

  5. 移动测试之appium+python 入门代码(三)

    在做app自动化过程中会踩很多坑,咱们都是用中文的app,所以首先要解决中文输入的问题!本篇通过屏蔽软键盘,绕过手机的软键盘方法,解决中文输入问题. 一.定位搜索 1.打开淘宝点击搜索按钮,进入搜索页 ...

  6. GRE新东方推荐学习方法(2010年左右)

    单词:新东方新版红宝书(<NEW GRE 词汇精选>),不用<再要你命三个> 填空:新东方绿皮书(扎实的词汇量) 阅读:1 新东方绿皮书:2 <GRE阅读 39+3全攻略 ...

  7. RTT设备与驱动之I2C:

    I2C主从结构(可以有多个主机,但同一时间只能有一个):I2C有两种地址结构7位/10位 总线空闲时,SDA 和 SCL 都处于高电平状态. 开始信号: SCL 为高电平时,主机将 SDA 拉低 结束 ...

  8. 登陆jq表单验证及jqcookie记住密码实例

    <p><%@ page contentType="text/html; charset=utf-8"%> <%@taglib prefix=" ...

  9. iTween 不能两个游戏对象同时用一个Hashtable

    两个游戏对象,点击其中一个,两个对象一起旋转,再点一下,两个都旋转到原来角度. 如图:两个游戏对象不能用一个Hashtable,会出错,达不到两个一起转的效果. 每个对象要有自己的Hashtable来 ...

  10. python单元测试框架-unittest(三)之用例执行顺序

    执行顺序规则: 测试类或测试方法的数字与字母顺序0~9,A-Z 执行如下脚本,理解用例执行顺序 #coding=utf-8 import unittest class Test1(unittest.T ...