Luogu4622 COCI2012-2013#6 JEDAN 组合、DP
题意:给出一个$N$个数的序列$a_i$,其中$a_i=-1$表示第$i$个位置数字未知,问有多少种用非负整数代替$a_i$中$-1$的方法使得从全$0$序列经过以下操作若干次得到序列$a_i$:每一次从序列中选取一段区间$l,r$,需要保证$l$到$r$中所有数相同,将$[l+1,r-1]$内所有数$+1$。$N \leq 10^4 , a_i \leq 10^4$
第一次看题没看懂题目语文药丸
注意到一些性质:
$1.$首尾元素一定要是$0$
$2.$相邻两个元素的差一定为$-1,0,1$,因为一次操作可以产生$1$的差,而产生了差的地方就无法再进行操作了。
我们就可以将这道题抽象为:选择若干数量的$-1,0,1$,使得它们的和为$-1$的段的两边的数字的差。
到这里有两种做法:
$1.$DP
设$f_{i,j}$表示补了前$i$个$-1$,总和为$j$的方案数,每一次从$f_{i-1,j-1},f_{i-1,j}.f_{i-1,j+1}$转移,复杂度为$O(n^2)$
#include<bits/stdc++.h>
using namespace std;
inline int read(){
;
;
char c = getchar();
while(!isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
] , pot[];
int main(){
int N = read();
int a = read();
|| a == -)
dp[] = ;
; i <= N ; i++){
int a = read();
memset(pot , , sizeof(pot));
)
, N - i)){
cout << ;
;
}
else
pot[a] = ((a ? dp[a - ] : ) + dp[a] + dp[a + ]) % MOD;
else
; j <= min(i - , N - i) ; j++)
pot[j] = ((j ? dp[j - ] : ) + dp[j] + dp[j + ]) % MOD;
memcpy(dp , pot , sizeof(pot));
}
cout << dp[];
;
}
$2.$枚举+组合
预处理出所有连续的$-1$区间的长度和两边的数字的差,枚举$0$的个数,得到$-1$的个数和$1$的个数然后组合数。注意出现数字$<0$的情况,可以将取$-1$和$1$的过程分别看作向右一格和向上一格,就转换成了经典的从$(0,0)$开始不与$y=x-k$相交的走路问题,可以通过组合数算出来。以后再来放代码吧
Luogu4622 COCI2012-2013#6 JEDAN 组合、DP的更多相关文章
- CF 553A 组合DP
http://codeforces.com/problemset/problem/553/A A. Kyoya and Colored Balls time limit per test 2 seco ...
- HDU 4532 湫秋系列故事——安排座位 (组合+DP)
湫秋系列故事——安排座位 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- 在TFS 2013的敏捷组合管理中添加积压工作
在TFS提供的三套默认模板中,组合管理(Portfolio Management)只包含功能(Feature)和要求这个两个积压工作.你可以参考下面的文档,学会如何在积压工作中添加额外的工作项类型. ...
- [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)
3193: [JLOI2013]地形生成 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 459 Solved: 223[Submit][Status ...
- acdream 1412 2-3Trees (组合+DP)
题意:2-3树的每个结点(除了叶子外)有2或3个孩子(分支),假设是一个满2-3树,那么给出叶子的数量,求这样的树有多少棵.(注:有2个孩子的结点视为相同,有3个孩子的结点视为相同,比如倒数第2层有4 ...
- HDU4532(组合DP)
题目:安排座位 解析:http://www.douban.com/note/269136472/ #include <iostream> #include <string.h> ...
- AGC 001E.BBQ Hard(组合 DP)
题目链接 \(Description\) 给定长为\(n\)的两个数组\(a,b\),求\[\sum_{i=1}^n\sum_{j=i+1}^n\binom{a_i+a_j+b_i+b_j}{a_i+ ...
- nyoj1076-方案数量 【排列组合 dp】
http://acm.nyist.net/JudgeOnline/problem.php?pid=1076 方案数量 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ...
- [组合][DP]luogu P3643 [APIO2016]划艇
题面 https://www.luogu.com.cn/problem/P3643 对于一个序列,第i项可取的值在{0}∪[ai,bi]之间,求使序列非零部分单调递增的方案数 分析 设 $f[i][j ...
随机推荐
- 学习css(TODO)
1. css 是一个什么样的角色? 答:css 负责控制网页的样式. 扩展:div + css 是经典的网页布局.实现网页内容与表现相分离. 2. css 的使用方式? 答:1. 内联式:直接在 HT ...
- cors解决跨域问题
在作前后端分离的时候,我们总是要做跨域处理. 使用 express 框架搭建项目的时候可以设置如下: app.use(function (req, res, next) { res.setHeader ...
- 排错-安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法
安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法 by:授客 QQ:1033553122 在Windows Server 2008安装SQL Server 2008出现的问 ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- .Net Core(二)EFCore
EFCore与之前的EF基本类似,区别在于配置的时候有一些差异:也取消了DB First和Model First,仅保留广泛使用的Code First模式:也不再支持LazyLoad.这里就感受一下 ...
- Git 恢复本地误删的文件
通过git进行代码管理的项目,如果在本地编辑的过程中误删了某些文件或者文件夹,可以通过git操作来复原. Step 1: git status 查看本地对改动的暂存记录.如下图所示,本人误删了文件夹“ ...
- ListView实现下拉动态渲染数据
欢迎讨论欢迎一起学习:微信jkxx123321 这是一篇关于LIstView实现动态数据渲染的文章![RN] 首先我们讲讲数据是如何来规划的 一般情况下我们有两种规划方案前提比如我们数据是100条+ ...
- c++面向对象学习计划
面向对象自学计划 视频学习计划 计划:每天观看至少两个视频,到开学时差不多完成视频的学习. 进度:已学习12个视频. C的强化与补漏 C语言不熟悉的知识点:数组,结构体,链表,文件 -----已重新学 ...
- 13、多进程multiprocessing、进程池
内容相关: multiprocessing: 进程的创建与运行 进程常用相关函数 进程池: 为什么要有进程池 进程池的创建与运行:串行.并行 回调函数 多进程multiprocessing: pyth ...
- [20180606]如何dump数据库里面的汉字.txt
[20180606]如何dump数据库里面的汉字.txt --//链接http://www.itpub.net/thread-2102613-1-2.html的问题. 比如:col 41: [42]e ...