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\) 在哪个位置,一轮轮下来,基本上过程都是相似的,所以不妨假设 ...
随机推荐
- 【错误】python百分号冲突not enough arguments for format string
query = "SELECT * FROM devices WHERE devices.`id` LIKE '%{}%'".format("f2333") d ...
- 5. class--extends
ES5: function article(x,y){ this.x = x; this.y = y; } article.prototype.say = function() { return (t ...
- react: typescript system params method optimize
import * as _ from "lodash"; import paramCache from "../common/param-cache" impo ...
- strpos的坑
$a = 'abcd'; $c = 'a'; echo strpos($a,$c)!==false ? '原来是兄弟' : '非我族类,砍ta';
- Programmatically mount a Microsoft Virtual Hard Drive (VHD)
By Pixy https://stackoverflow.com/questions/24396644/programmatically-mount-a-microsoft-virtual-hard ...
- fail-safe fail-fast知多少
目录 简介 Fail-fast Iterator Fail-fast 的原理 Fail-safe Iterator 总结 fail-safe fail-fast知多少 简介 我们在使用集合类的时候,通 ...
- 用libevent写的海康摄像头rtsp客户端
之前一直使用live555作为RTSP的客户端,但其框架臃肿,虽然支持各种格式,但实际中并没有这些需求,关键是其注重于格式的解析,却不注重网络IO,单线程下性能也不高,重新用libevent编写rts ...
- ASP.NET Core 找不到 npm指令异常
1.错误再现 利用VS2019预览版创建ASP.NET Core 的单页面Web程序 创建后直接运行,出现如下错误 Ensure that 'npm' is installed and can be ...
- KafkaConsumer assign VS subscribe
背景 在kafka中,正常情况下,同一个group.id下的不同消费者不会消费同样的partition,也即某个partition在任何时刻都只能被具有相同group.id的consumer中的一个消 ...
- 《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
2.1 语句JavaScript语句是基本的编程单元,通常表示JavaScript程序中的单个步骤.可以把一条语句看做一个句子一样,就好像成串的句子一起组成一个段落(或一章,或一本书)一样,把语句组合 ...