【\(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)\)的方案数

\[F_{i,x,y}=\sum_{a=0}^{Mx} \sum_{b=0}^{My} F_{i-1,x-a,y-b}
\]

\[((a,b)\neq ((r_1,\cdots r_K,r_1,\cdots r_K))
\]

状态枚举\(i,x,y\),状态转移枚举\(a,b\)

\(O(1600\times 800^4\))


【朴素做法二】

在做法一的算法考虑如何优化。

我们注意到:状态转移这个东西,如果排除掉那\(K\)个不能走的向量,相当于对一个\(Mx\times My\)的矩阵求和

而这个东西是可以用二维前缀和维护的。所以我们只需枚举那\(K\)个不能走的向量,实现\(O(K)\)的转移

这里我们把\(K=50\)这个常数忽略掉

\(O(1600\times 800^2\))


【正解】

还是这个状态转移方程:

\[F_{i,x,y}=\sum_{a=0}^{Mx} \sum_{b=0}^{My} F_{i-1,x-a,y-b}
\]

我们发现:\(x,y\)是相互独立的,也就是说\(x\)轴上的转移与\(y\)轴上的转移是没有关系的

所以我们完全可以开两个数组:

\(f_{i,x}\)表示在一维上走\(i\)步到横坐标为\(x\)的方案数,\(g_{i,y}\)表示在一维上走\(i\)步到纵坐标为\(y\)的方案数

由此可得:

\[F_{i,x,y}=f_{i,x}\times g_{i,y}
\]

通过前缀和维护,即可\(O(R\times Tx)=O(1600\times 800)\)完成\(DP\)


这只是\(K=0\)的情况,如何排除那些不合法的步数?

我们设\(h_{i,z}\)表示走\(i\)步全都不合法,走到\((10z,10z)\)的方案数(\(r_i\)一定是\(10\)的倍数)

\[h_{i,z}=\sum_{j=1}^K h_{i-1,z-r_j}
\]

还有一个细节,由于\((0,0)\)也是不合法的,那就添加一个\(r_0=0\)即可

这就要用到容斥原理了。

即可得到答案:

\[\sum_{i=0}^R \sum_{z=0}^{\frac{min(Tx,Ty)}{10}} (-1)^i \times h_{i,z} \times f_{R-i,Tx-10z} \times g_{R-i,Ty-10z} \times C_R^i
\]

这里乘上\(C_R^i\)是因为我们并不知道那\(i\)个不合法的步是那几步

最后这个容斥的复杂度是\(O(R\times \frac{min(Tx,Ty)}{10})=O(1600\times 80)\)

那么就做出来了

代码我就不贴了吧,因为只要想出做法,就只是一个简单的\(DP\)了。

主要考查的是思维

TC SRM498 Div1 1000PT(容斥原理+DP)的更多相关文章

  1. [CF245H] Queries for Number of Palindromes (容斥原理dp计数)

    题目链接:http://codeforces.com/problemset/problem/245/H 题目大意:给你一个字符串s,对于每次查询,输入为一个数对(i,j),输出s[i..j]之间回文串 ...

  2. 2018.07.13 [HNOI2015]落忆枫音(容斥原理+dp)

    洛谷的传送门 bzoj的传送门 题意简述:在DAG中增加一条有向边,然后询问新图中一共 有多少个不同的子图为"树形图". 解法:容斥原理+dp,先考虑没有环的情况,经过尝试不难发现 ...

  3. BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]

    3622: 已经没有什么好害怕的了 题意:和我签订契约,成为魔法少女吧 真·题意:零食魔女夏洛特的结界里有糖果a和药片b各n个,两两配对,a>b的配对比b>a的配对多k个学姐就可能获胜,求 ...

  4. BZOJ 1042:[HAOI2008]硬币购物(容斥原理+DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1042 [题目大意] 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4. 某人去 ...

  5. 【BZOJ3622】已经没什么好害怕的了 容斥原理+dp

    Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT 输入的2*n个数字保证全不相 ...

  6. Topcoder SRM 698 Div1 250 RepeatString(dp)

    题意 [题目链接]这怎么发链接啊..... Sol 枚举一个断点,然后类似于LIS一样dp一波 这个边界条件有点迷啊..fst了两遍... #include<bits/stdc++.h> ...

  7. bzoj 1042: [HAOI2008]硬币购物【容斥原理+dp】

    当然是容斥啦. 用dp预处理出\( f[i] \),表示在\( i \)价格时不考虑限制的方案数,转移方程是\( f[i]+=f[i-c[j]] \),用状压枚举不满足的状态容斥一下即可. #incl ...

  8. 「模拟赛20191019」B 容斥原理+DP计数

    题目描述 将\(n\times n\)的网格黑白染色,使得不存在任意一行.任意一列.任意一条大对角线的所有格子同色,求方案数对\(998244353\)取模的结果. 输入 一行一个整数\(n\). 输 ...

  9. ARC093F Dark Horse 容斥原理+DP

    题目传送门 https://atcoder.jp/contests/arc093/tasks/arc093_d 题解 由于不论 \(1\) 在哪个位置,一轮轮下来,基本上过程都是相似的,所以不妨假设 ...

随机推荐

  1. 【错误】python百分号冲突not enough arguments for format string

    query = "SELECT * FROM devices WHERE devices.`id` LIKE '%{}%'".format("f2333") d ...

  2. 5. class--extends

    ES5: function article(x,y){ this.x = x; this.y = y; } article.prototype.say = function() { return (t ...

  3. react: typescript system params method optimize

    import * as _ from "lodash"; import paramCache from "../common/param-cache" impo ...

  4. strpos的坑

    $a = 'abcd'; $c = 'a'; echo strpos($a,$c)!==false ? '原来是兄弟' : '非我族类,砍ta';

  5. Programmatically mount a Microsoft Virtual Hard Drive (VHD)

    By Pixy https://stackoverflow.com/questions/24396644/programmatically-mount-a-microsoft-virtual-hard ...

  6. fail-safe fail-fast知多少

    目录 简介 Fail-fast Iterator Fail-fast 的原理 Fail-safe Iterator 总结 fail-safe fail-fast知多少 简介 我们在使用集合类的时候,通 ...

  7. 用libevent写的海康摄像头rtsp客户端

    之前一直使用live555作为RTSP的客户端,但其框架臃肿,虽然支持各种格式,但实际中并没有这些需求,关键是其注重于格式的解析,却不注重网络IO,单线程下性能也不高,重新用libevent编写rts ...

  8. ASP.NET Core 找不到 npm指令异常

    1.错误再现 利用VS2019预览版创建ASP.NET Core 的单页面Web程序 创建后直接运行,出现如下错误 Ensure that 'npm' is installed and can be ...

  9. KafkaConsumer assign VS subscribe

    背景 在kafka中,正常情况下,同一个group.id下的不同消费者不会消费同样的partition,也即某个partition在任何时刻都只能被具有相同group.id的consumer中的一个消 ...

  10. 《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句

    2.1 语句JavaScript语句是基本的编程单元,通常表示JavaScript程序中的单个步骤.可以把一条语句看做一个句子一样,就好像成串的句子一起组成一个段落(或一章,或一本书)一样,把语句组合 ...