0%
比赛易错总结
发表于
更新于
-
没开 longlong, 没有1ll
-
数组开小
-
数组开太大,没注意空间
-
多测不清空
-
注意模数不一定是 1e9+7
-
数组越界。数组各维度空间开反
-
数学和 dp 先把式子写好再写代码
-
注意变量名不要写错
-
注意 stl 容器的大小是 ull 类型的.
2021年7月做题记录
发表于
2021-7-20acm总结
发表于
构造题总结
发表于
[AGC013E] Placing Squares
发表于
难度
思维难度 : 四星
代码难度 : 一星
标签
dp + 矩阵乘法 + 组合意义 + 计数
题解
考虑组合意义,就是一个有 n 个格子,n+1 个间隔,每个间隔可以放隔板,把格子分成一些部分。每个格子都可以放 1−2 个球,红球或蓝球,最后要求每个部分都有且仅有一个红球和一个蓝球。其中有一些间隔不能放隔板。求方案数。
对于一种放隔板的方案,放球的方案数显然是 ∏i=1kai2 ,不同的放隔板的方案显然和放正方形的方案一一对应。
所有放隔板和放球的总方案数就是原题所有合法方案的贡献之和。
那么考虑新问题如何计数。如果不是关键点的话,可以推出转移 A:
f[i][j]表示dp到第i个格子,当前部分有j个球f[i][0]=f[i−1][0]+f[i−1][2](放隔板或不放隔板)f[i][1]=2f[i−1][0]+f[i−1][1]+2f[i−1][2](放一个球,放另一个球,放隔板后放一个球)f[i][2]=f[i−1][0]+f[i−1][1]+2f[i−1][2](放两个球,放另一个球,放隔板后放两个球或什么都不放)
可以直接矩阵快速幂.
是关键点的话容易推出另一种转移 B.
如果当前 dp 到的位置是关键点,乘上转移矩阵 B ,否则乘上转移矩阵 A 。
因为关键点的个数 ≤105 , 所以关键点之间的部分可以矩阵快速幂优化.
Code:
1 | #include <iostream> |
总结
对于一些比较难计数的计数题, 可以考虑它的组合意义,一般都会转化为放球问题, 这时候就可以用比较简单的 dp , 或熟悉的计数套路解决.
[NOI2018]冒泡排序
发表于
[APIO2016]划艇
发表于
2021年8月学习记录
发表于
更新于