[DP] [组合数学] [BZOJ4807] 車
2017-08-19 02:36
274 查看
题目传送门
蛤蛤蛤蛤……高三真是狗……
(别问我开学第一周怎么度过的我不想说……)
看到题目首先想到一个DP,dp[i][j]表示放在第i行第j列的可行方案数,于是就有如下转移辣:
dp[i][j]=∑k=j+1mdp[i−1][k] i∈[2,n],j∈[1,m]
答案就是:
ans=∑i=1mdp[n][i]
初状态是:
dp[1][i]=1 i∈[1,m]
应该比较好理解吧……車不能与其他車放置在同行和同列,还必须要求每个車的左上不能有其他車。
不过棋盘的放置是不确定的,可以n作为行也可以m作为行,所以把n和m反过来再DP一遍。发现有时候n作为行无解有时候m作为行无解,有解时n<m,所以DP一遍就好了。
这样随便一个O(nm2)的DP就出来了,可是……过不去……
那么找找优化方法,注意到第二行的DP类似于对第一行做了个前缀和,每一行与前一行都错开一位做前缀和处理,所以那个DP式子中代价O(m)的求和就可以优化一下……
列个表看一下,其实DP方程就被优化成了这样:
dp[i][j]=dp[i][j+1]+dp[i−1][j+1] i∈[2,n],j∈[1,m]
如果学过选修2-3,就会看出这和组合数很类似啊……
(n+1m)=(nm)+(nm−1)
具体证明……这个数学老师应该讲了吧……(我忘了……)
这个DP时间复杂度是O(nm)的,不过打一下表,发现这就是把杨辉三角顺时针旋转了90∘,要求的值,即最后一行的和,其实就是杨辉三角中一列的和,要求的答案在杨辉三角中可以表示为:
ans=∑i=1m−1(n−1i)
这个求和还是数学课上讲过……可以化简为(nm)……
所以优化了一堆,就是求个组合数咯……输出最后50位……
至于n<m,将DP数组转置的时候自然是m<n,所以有m>n的情况只需把棋盘转一下,转成合法情况放置再转回去,就是对应的合法情况咯……
有意思的题……
时间复杂度O(nlog2log2n+50nlog2n)?xbb别当真……
Code
蛤蛤蛤蛤……高三真是狗……
(别问我开学第一周怎么度过的我不想说……)
看到题目首先想到一个DP,dp[i][j]表示放在第i行第j列的可行方案数,于是就有如下转移辣:
dp[i][j]=∑k=j+1mdp[i−1][k] i∈[2,n],j∈[1,m]
答案就是:
ans=∑i=1mdp[n][i]
初状态是:
dp[1][i]=1 i∈[1,m]
应该比较好理解吧……車不能与其他車放置在同行和同列,还必须要求每个車的左上不能有其他車。
不过棋盘的放置是不确定的,可以n作为行也可以m作为行,所以把n和m反过来再DP一遍。发现有时候n作为行无解有时候m作为行无解,有解时n<m,所以DP一遍就好了。
这样随便一个O(nm2)的DP就出来了,可是……过不去……
那么找找优化方法,注意到第二行的DP类似于对第一行做了个前缀和,每一行与前一行都错开一位做前缀和处理,所以那个DP式子中代价O(m)的求和就可以优化一下……
列个表看一下,其实DP方程就被优化成了这样:
dp[i][j]=dp[i][j+1]+dp[i−1][j+1] i∈[2,n],j∈[1,m]
如果学过选修2-3,就会看出这和组合数很类似啊……
(n+1m)=(nm)+(nm−1)
具体证明……这个数学老师应该讲了吧……(我忘了……)
这个DP时间复杂度是O(nm)的,不过打一下表,发现这就是把杨辉三角顺时针旋转了90∘,要求的值,即最后一行的和,其实就是杨辉三角中一列的和,要求的答案在杨辉三角中可以表示为:
ans=∑i=1m−1(n−1i)
这个求和还是数学课上讲过……可以化简为(nm)……
所以优化了一堆,就是求个组合数咯……输出最后50位……
至于n<m,将DP数组转置的时候自然是m<n,所以有m>n的情况只需把棋盘转一下,转成合法情况放置再转回去,就是对应的合法情况咯……
有意思的题……
时间复杂度O(nlog2log2n+50nlog2n)?xbb别当真……
Code
相关文章推荐
- BZOJ 3997 [TJOI2015]组合数学(单调DP)
- 【bzoj2339】【HNOI2011】【卡农】【组合数学+dp】
- 【BZOJ3997】组合数学,总之是DP就对了
- [BZOJ3997]TJOI2015组合数学|DP
- BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]
- bzoj 3997: [TJOI2015]组合数学 dp
- [DP 组合数学] BZOJ 4498 魔法的碰撞
- 【bzoj 3997】组合数学(DP)
- 【bzoj3997】[TJOI2015]组合数学 dp
- 【bzoj3997】[TJOI2015]组合数学 Dilworth定理结论题+dp
- bzoj 3997 [TJOI2015]组合数学(DP)
- [BZOJ]4807: 車 组合数学+高精度
- 【BZOJ 3997】 3997: [TJOI2015]组合数学 (DP| 最小链覆盖=最大点独立集)
- 【bzoj3997】【TJOI2015】【组合数学】【dp】
- 【BZOJ3997】【TJOI2015】组合数学 Dilworth定理 DP
- BZOJ 2111: [ZJOI2010]Perm 排列计数|组合数学|Lucas定理|DP
- codeforces 156C Cipher 组合数学 字符串dp
- BZOJ 4402: Claris的剑|组合数学
- 组合数学+高精度 BZOJ2729 [HNOI2012]排队
- bzoj1856 字符串 组合数学