[XSY3343] 程序锁(DP)
XSY3343
先考虑如何判定一个填好的序列会不会gg:
若∃p,q,使s′[p+1]=t′[q+1]=−1\exist p,q,使s'[p+1]=t'[q+1]=-1∃p,q,使s′[p+1]=t′[q+1]=−1且∑i=1ps′[i]+∑j=1qt′[j]≤0\sum_{i=1}^{p}s'[i]+\sum_{j=1}^{q}t'[j]\leq 0∑i=1ps′[i]+∑j=1qt′[j]≤0,则这个序列必gg。
那么我们只需找到sums′=mins′[p+1]=−1{∑i=1ps′[i]}sum_{s'}=min_{s'[p+1]=-1}\{\sum_{i=1}^{p}s'[i]\}sums′=mins′[p+1]=−1{∑i=1ps′[i]},sumt′=mint′[q+1]=−1{∑j=1qt′[j]}sum_{t'}=min_{t'[q+1]=-1}\{\sum_{j=1}^{q}t'[j]\}sumt′=mint′[q+1]=−1{∑j=1qt′[j]},判断sums′+sumt′sum_{s'}+sum_{t'}sums′+sumt′是否≤0\leq0≤0即可判断序列会不会gg。
为了方便,我们稍微转换一下条件,把s′[p+1],t′[q+1]s'[p+1],t'[q+1]s′[p+1],t′[q+1]也纳入sums′,sumt′sum_{s'},sum_{t'}sums′,sumt′中,即定义:
sums′=mins′[p]=−1{∑i=1ps′[i]}sum_{s'}=min_{s'[p]=-1}\{\sum_{i=1}^{p}s'[i]\}sums′=mins′[p]=−1{i=1∑ps′[i]}
特别地,若s′[]s'[]s′[]全为1,sums′=∑i=1∣s′∣s′[i]sum_{s'}=\sum_{i=1}^{|s'|}s'[i]sums′=∑i=1∣s′∣s′[i]
sumt′=mint′[q]=−1{∑i=1qt′[i]}sum_{t'}=min_{t'[q]=-1}\{\sum_{i=1}^{q}t'[i]\}sumt′=mint′[q]=−1{i=1∑qt′[i]}
特别地,若t′[]t'[]t′[]全为1,sumt′=∑i=1∣t′∣t′[i]sum_{t'}=\sum_{i=1}^{|t'|}t'[i]sumt′=∑i=1∣t′∣t′[i]
那么如果s′[],t′[]s'[],t'[]s′[],t′[]都不全为1,
有若sums′+sumt′≤−2sum_{s'}+sum_{t'}\leq-2sums′+sumt′≤−2,则序列必gg。
也即若sums′+sumt′≥−1sum_{s'}+sum_{t'}\geq-1sums′+sumt′≥−1,序列一定不会gg。
否则,若sums′+sumt′≥0sum_{s'}+sum_{t'}\geq0sums′+sumt′≥0,序列一定不会gg。
然后考虑DP,正着DP很困难,考虑倒着DP,这样每次只会增加一个小前缀。
设fi,j,kf_{i,j,k}fi,j,k表示填完[i,n][i,n][i,n],这些位置相对于iii的前缀和中,以−1-1−1结尾的最小前缀和=j=j=j的方案数,kkk表示jjj是否等于总和
如果i−1i-1i−1位可以填111,那么有fi,j,0→fi−1,j+1,0,fi,j,1→fi−1,j+1,1f_{i,j,0}\rightarrow f_{i-1,j+1,0},f_{i,j,1}\rightarrow f_{i-1,j+1,1}fi,j,0→fi−1,j+1,0,fi,j,1→fi−1,j+1,1,因为在最前面加一个111并不改变原来的最小前缀和
如果i−1i-1i−1位可以填−1-1−1,那么有fi,j,0→fi−1,min(−1,j−1),0,fi,j,1→fi−1,min(−1,j−1),[j≤0]f_{i,j,0}\rightarrow f_{i-1,\min(-1,j-1),0},f_{i,j,1}\rightarrow f_{i-1,\min(-1,j-1),[j\le0]}fi,j,0→fi−1,min(−1,j−1),0,fi,j,1→fi−1,min(−1,j−1),[j≤0],因为增加了一个值为−1-1−1的前缀和,所以原来j>0j>0j>0且最小前缀和=j=j=j的方案会变为最小前缀和=−1≠j−1=-1\ne j-1=−1=j−1
对两个序列分别DP后直接统计答案即可
总结:
倒着DP 和 对s′,t′s',t's′,t′两个序列分别DP 这两点太巧妙了%%%
[XSY3343] 程序锁(DP)相关推荐
- [xsy3343]程序锁
题意:有两个序列,序列中数字$\in\{-1,0,1\}$ 有两个指针,初始时分别指向两个序列的开始位置,有一个初始为$0$的数$a$,重复以下过程直到两个指针都指向序列末尾后 如果一个指针指向末尾后 ...
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码......
当我在窗体初始化的时候,调用了一个外部的dill时,它就不知什么原因的 抛出一个"正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码&quo ...
- mysql锁与程序锁_数据库加锁(转)
1 如何锁一个表的某一行 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM table ROWLOCK WHERE id = ...
- android安全问题(二) 程序锁
导读:本文介绍如何实现对应用加锁的功能,无须root权限 某些人有时候会有这样一种需求,小A下载了个软件,只是软件中的美女过于诱惑与暴露,所以他不想让别人知道这是个什么软件,起码不想让别人打开浏览.而 ...
- mysql锁与程序锁_sql 锁类型与锁机制
SQL Server锁类型(SQL)收藏 1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁. 2. NOLOCK:不添加共享锁和排它锁,当这个选项生 ...
- 检测到 LoaderLock Message Microsoft.DirectX.dll”正试图在 OS 加载程序锁内执行托管代码。...
今天在群里有朋友问了一个"检测到 LoaderLock Message Microsoft.DirectX.dll"正试图在 OS 加载程序锁内执行托管代码."的问题,自 ...
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码...
在窗体初始化的时候,调用了一个外部的dll,不知什么原因的 抛出一个"正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码"的异常, ...
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法...
这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 "正试图在 os 加载程序锁内执行托管代码.不要尝试在 Dl ...
- 正试图在 os 加载程序锁内执行托管代码
问题: 正尝试在 OS 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起. 方法一: 调试->异常->Managed Debu ...
最新文章
- Linux的僵尸进程
- 物流系统高可用架构案例
- 三、值类型与引用类型
- linux 串口特别是接收
- 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式
- java getimage_在Java语言中,为了使用getImage的方法,你需要导入的类是()。
- 织梦手机版list.php,解决织梦一级目录作域名list.php无法跳转到手机站的问题
- P1313-计算系数【组合数,二项式定理】
- three.js加载3d模型_基于WebGL的3D技术在网页中的运用 ThingJS 前端开发
- 别再用硬编码写业务流程了,试试这款轻量级流程编排框架
- 增值税防伪税控系统到底是什么呢?
- win10分辨率不能调整_笔记本win10系统调整外接显示器分辨率的方法
- 72个嵌入式技术网站
- 关闭Windows Server IE增强安全配置 解决Windows服务器无法上网的问题
- Set 中 toArray()
- 用html写QQ音乐首页,html+caa手写qq音乐_html/css_WEB-ITnose
- 技嘉主板大部分型号开启WOL(Wake up-On-LAN)网络唤醒与定时开机
- thymeleaf笔记
- 区块链入门:如何简单易懂地介绍区块链(图文)
- 方太:以“一”解“套”
热门文章
- mongodb默认的用户名密码_设置mongodb的用户名密码 | Think in Drupal
- cad必练10张图_CAD比例问题大详解!赶紧收藏!
- c语言综合模拟测试题答案,【C语言指针模拟测试题_答案】
- html 去除max-height,HTML Style maxHeight用法及代码示例
- [MyBatisPlus]通用Service接口测试通用Service
- [RabbitMQ]工作队列原理_代码实现
- [蓝桥杯][2014年第五届真题]分糖果-模拟
- dft + fft(模板)
- string(STL)
- Codeforces Round #626 (Div. 2) D. Present 按位贡献 + 快排新姿势