TC SRM498 Div1 1000PT(容斥原理+DP)
【\(Description\)】
网格中每步可以走\((0,\cdots M_x,0\cdots M_y)\)中任意非零向量,有\(K\)种向量不能走,分别是\((r_1,r_1),(r_2,r_2),\cdots , (r_K,r_K)\)。 \(r_i\)一定是\(10\)的倍数。求从\((0,0)\)走到\((Tx,Ty)\)且走\(R\)步的方案数( \(Tx,Ty,Mx,My\leq 800,R\leq 1600,K\leq 50\))
无 【\(Input\;Sample\)】
无 【\(Output\;Sample\)】
【朴素做法一】
设\(F_{i,x,y}\)表示走\(i\)步到\((x,y)\)的方案数
\]
\]
状态枚举\(i,x,y\),状态转移枚举\(a,b\)
\(O(1600\times 800^4\))
【朴素做法二】
在做法一的算法考虑如何优化。
我们注意到:状态转移这个东西,如果排除掉那\(K\)个不能走的向量,相当于对一个\(Mx\times My\)的矩阵求和
而这个东西是可以用二维前缀和维护的。所以我们只需枚举那\(K\)个不能走的向量,实现\(O(K)\)的转移
这里我们把\(K=50\)这个常数忽略掉
\(O(1600\times 800^2\))
【正解】
还是这个状态转移方程:
\]
我们发现:\(x,y\)是相互独立的,也就是说\(x\)轴上的转移与\(y\)轴上的转移是没有关系的
所以我们完全可以开两个数组:
\(f_{i,x}\)表示在一维上走\(i\)步到横坐标为\(x\)的方案数,\(g_{i,y}\)表示在一维上走\(i\)步到纵坐标为\(y\)的方案数
由此可得:
\]
通过前缀和维护,即可\(O(R\times Tx)=O(1600\times 800)\)完成\(DP\)
这只是\(K=0\)的情况,如何排除那些不合法的步数?
我们设\(h_{i,z}\)表示走\(i\)步全都不合法,走到\((10z,10z)\)的方案数(\(r_i\)一定是\(10\)的倍数)
\]
还有一个细节,由于\((0,0)\)也是不合法的,那就添加一个\(r_0=0\)即可
这就要用到容斥原理了。
即可得到答案:
\]
这里乘上\(C_R^i\)是因为我们并不知道那\(i\)个不合法的步是那几步
最后这个容斥的复杂度是\(O(R\times \frac{min(Tx,Ty)}{10})=O(1600\times 80)\)
那么就做出来了
代码我就不贴了吧,因为只要想出做法,就只是一个简单的\(DP\)了。
主要考查的是思维
TC SRM498 Div1 1000PT(容斥原理+DP)的更多相关文章
- [CF245H] Queries for Number of Palindromes (容斥原理dp计数)
题目链接:http://codeforces.com/problemset/problem/245/H 题目大意:给你一个字符串s,对于每次查询,输入为一个数对(i,j),输出s[i..j]之间回文串 ...
- 2018.07.13 [HNOI2015]落忆枫音(容斥原理+dp)
洛谷的传送门 bzoj的传送门 题意简述:在DAG中增加一条有向边,然后询问新图中一共 有多少个不同的子图为"树形图". 解法:容斥原理+dp,先考虑没有环的情况,经过尝试不难发现 ...
- BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]
3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...
- BZOJ 1042:[HAOI2008]硬币购物(容斥原理+DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1042 [题目大意] 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4. 某人去 ...
- 【BZOJ3622】已经没什么好害怕的了 容斥原理+dp
Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT 输入的2*n个数字保证全不相 ...
- Topcoder SRM 698 Div1 250 RepeatString(dp)
题意 [题目链接]这怎么发链接啊..... Sol 枚举一个断点,然后类似于LIS一样dp一波 这个边界条件有点迷啊..fst了两遍... #include<bits/stdc++.h> ...
- bzoj 1042: [HAOI2008]硬币购物【容斥原理+dp】
当然是容斥啦. 用dp预处理出\( f[i] \),表示在\( i \)价格时不考虑限制的方案数,转移方程是\( f[i]+=f[i-c[j]] \),用状压枚举不满足的状态容斥一下即可. #incl ...
- 「模拟赛20191019」B 容斥原理+DP计数
题目描述 将\(n\times n\)的网格黑白染色,使得不存在任意一行.任意一列.任意一条大对角线的所有格子同色,求方案数对\(998244353\)取模的结果. 输入 一行一个整数\(n\). 输 ...
- ARC093F Dark Horse 容斥原理+DP
题目传送门 https://atcoder.jp/contests/arc093/tasks/arc093_d 题解 由于不论 \(1\) 在哪个位置,一轮轮下来,基本上过程都是相似的,所以不妨假设 ...
随机推荐
- 全网最全最细的fiddler使用教程以及工作原理
目录:导读 一.Fiddler抓包工具简介 二.Fiddler工作原理 三.Fiddler安装 四.Fiddler界面介绍 五.Fiddler菜单栏介绍 六.Fiddler工具栏介绍 七.Fiddl ...
- ES[7.6.x]学习笔记(三)新建索引
与ES的交互方式 与es的交互方式采用http的请求方式,请求的格式如下: curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT& ...
- Python快速编程入门,打牢基础必须知道的11个知识点 !
Python被誉为全世界高效的编程语言,同时也被称作是“胶水语言”,那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知识点,也就是它为何能够如此受欢迎的原因. Python 简介 ...
- 20199310《Linux内核原理与分析》第十二周作业
1.问题描述 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发.在本实验中,通过学习重现攻击该漏洞,加深对于ShellSho ...
- 存储-raid
- 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...
- C语言实现数组循环左移
c语言实现数组左移: 例如输入: 8 3 1 2 3 4 5 6 7 8 输出: 4 5 6 7 8 1 2 3 #include <stdio.h> int main(int argc, ...
- Android Studio常用配置
目录 1. 主题颜色设置 2. Logcat颜色设置 3. 类注释 4. 编译器添加背景图 4.1 第一种方式 Background Image 4.2 第二种方式 Sexy Editor 5. 修改 ...
- Android xUtils3.0使用手册(一)- 基础功能使用
xUtils3 其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是苦于没有完整的使用手册,下面是使用中的一些总结,不断完善. xUtils 版本 3.3.36 jar包下载地址 ht ...
- 已有项目接入git远程仓库
1.项目根目录初始化git仓库 git init 2.将本地项目与远程仓库关联(首先得在远程创建一个代码仓库) git remote add origin 远程仓库地址 诺,仓库地址就是这个玩意 3. ...