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\) 在哪个位置,一轮轮下来,基本上过程都是相似的,所以不妨假设 ...
随机推荐
- [转载]MySQL中int(11)最大长度是多少?
原文地址:https://blog.csdn.net/allenjay11/article/details/76549503 今天在添加数据的时候,发现当数据类型为 int(11) 时,我当时让用户添 ...
- Linux常见提权
常见的linux提权 内核漏洞提权 查看发行版 cat /etc/issue cat /etc/*-release 查看内核版本 uname -a 查看已经安装的程序 dpkg -l rpm -qa ...
- 来个干货——使用VS2019发布.NET Core程序并部署到IIS的最新教程
使用VS2019发布.NET Core程序并部署到IIS,不管你是使用.NET Core开发的是Web API还是网站类的程序,如果你是部署到IIS,那么下面的内容都适合于你,不会将.NET Core ...
- 使用HashMap或Hashset优化使用循环判断字符串中是否含有重复元素
原本遇到判断字符串中是否含有重复元素的问题总是使用for循环遍历进行判断,这一方法则需要O(n3)的时间复杂度,如果本身方法处于几个循环中,就会指数倍增加时间复杂度.类似于如下代码: String[] ...
- 常问的MySQL面试题整理
char.varchar 的区别是什么? varchar是变长而char的长度是固定的.如果创建的列是固定大小的,你会得到更好的性能 truncate 和 delete 的区别是什么? delete ...
- 如何将Python项目发布到PyPI
The Python Package Index (PyPI) is a repository of software for the Python programming language. 如何打 ...
- mysql 更改默认字符集
mysql 默认字符集概述 首先,MySQL的字符集问题主要是两个概念: haracter Sets Collations 前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在 ...
- 数据结构(C语言版)---查找
1.查找表:同一类型的数据元素构成的集合. 2.对查找表进行的操作:查询某特定元素.检索满足条件的元素的属性.插入元素.删除元素. 1)若对查找表进行的操作只涉及前两种,则为静态查找表:需要进行插入和 ...
- python信息收集(三)
前两篇介绍了利用python编写一些脚本实现二层主机的发现,这一篇介绍一下三层主机的发现. 一般来说,三层主机的发现主要是通过ICMP协议来实现的.其中ICMP协议中的ping命令可以 ...
- 设计模式 - 迭代器模式详解及其在ArrayList中的应用
基本介绍 迭代器模式(Iterator Pattern)是 Java 中使用最多的一种模式,它可以顺序的访问容器中的元素,但不需要知道容器的内部细节 模式结构 Iterator(抽象迭代器):定义遍历 ...