2019暑期集训 - Day 9
成绩终于回升了
概述
提高 B 组
4题:T0 , T1 , T2 , T3
192.5/400 分
28/157 名
T0 粉刷匠
RE 80/100 分
Description
windy 有 \(N\) 条木板需要被粉刷。
每条木板被分为 \(M\) 个格子。
每个格子要被刷成红色或蓝色。
windy 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。
每个格子最多只能被粉刷一次。
如果 windy 只能粉刷 \(T\) 次,他最多能正确粉刷多少格子?
一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
Input
第一行包含三个整数, \(N\ ,\ M\ ,\ T\) 。
接下来有 \(N\) 行,每行一个长度为M的字符串, '0' 表示红色, '1' 表示蓝色。
Output
输出一个整数,表示最多能正确粉刷的格子数。
Sample Input
3 6 3
111111
000000
001100
Sample Output
16
Hint
100% 的数据,满足 \(1 \leq N,M \leq 50\) ; 0 <= T <= 2500 。
Solution
美丽的 DP
设 \(f_{i,j,k}\) 代表在刷完第 \(i\) 块木板第 \(j\) 个格子及这以前,粉刷 \(k\) 次所能得到的最大正确数。
比如样例中, \(f_{3,2,0}=0,f_{3,2,1}=6,f_{3,2,2}=12,f_{3,2,3}=14\)
可以得出转移方程 \(f_{i,j,k}=max(f_{i,j-t,k}\ ,\ f_{i,j-t,k-1}+s[j-t+1][j])\) 其中 \(s[j-t+1][j]\) 代表在这个木板中,从第 \(i-t+1\) 个格子以第 \(j\) 个格子的颜色粉刷到第 \(j\) 个格子能得到的正确数。( \(s\) 可以直接暴力枚举,无需优化了)
然后上 DP ,就 AC 了
T1 迷路
WA 12.5/100 分
Description
windy在有向图中迷路了。
该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1。
现在给出该有向图,你能告诉windy总共有多少种不同的路径吗?
注意:windy不能在某个节点逗留,且通过某有向边的时间严格为给定的时间。
Input
第一行包含两个整数, \(N,T\) 。
接下来有 \(N\) 行,每行一个长度为 \(N\) 的字符串。
第 \(i\) 行第 \(j\) 列为 '0' 表示从节点 \(i\) 到节点 \(j\) 没有边。
为 '1' 到 '9' 表示从节点 \(i\) 到节点 \(j\) 需要耗费的时间。
Output
输出一个整数,可能的路径数,这个数可能很大,只需输出这个数除以 2009 的余数。
Sample Input
2 2
11
00
Sample Output
1
Hint
100% 的数据,满足 \(2 \leq N \leq 10\ ,\ 1 \leq T \leq 1000000000\) 。
Solution
这题啊,奇葩
简单说,利用矩阵乘法的定义,可以用幂运算快速得到第 \(k\) 个时刻到达每个点的方案数。
具体所,,,
具体说我也说不清楚,稍微改了一下题解,搬过来。
由于这道题的 \(T\) 很大,线性算法是过不了的,所以我们考虑矩阵乘法。
这道题图中的边权为 \(1\sim 9\),比较小,所以考虑拆点,为了方便表示,把编号为 \(i\) 的点拆为 \(10i+1\sim 10i+9\) 一共 \(9\) 个节点。如果 \(i\) 到 \(j\) 有一条权值为 \(k\) 的路径,那么就把矩阵中 \([\ 10i+k\ ,\ 10j+1\ ]\) 的值设为 \(1\),相当于先从 \(10i+1\to 10i+k\) 走过 \(k-1\) 条长度为 \(1\) 的路径,再在 \(10i+k\to 10j+1\) 走过 \(1\) 条长度为 \(1\) 的路径,总长度为 \(k\) 。
如此,矩阵每次乘法运算后,每个位置都相当于更新到了下一个时刻从 \(i\) 到 \(j\) 的方案数,因为矩阵乘法的运算方式刚好和计算下一个时刻的方案数(连乘的方式都是一模一样的)
跑一遍快速幂,计算矩阵的 \(T\) 次幂, 此时矩阵中的 \([0][10n+1]\) 的值即是方案总数。
T2 游戏
Description
windy 学会了一种游戏。 对于 \(1\) 到 \(N\) 这 \(N\) 个数字,都有唯一且不同的 \(1\) 到 \(N\) 的数字与之对应。 最开始 windy 把数字按顺序 \(1,2,3,\cdots ,N\) 写一排在纸上。 然后再在这一排下面写上它们对应的数字。 然后又在新的一排下面写上它们对应的数字。 如此反复,直到序列再次变为 \(1,2,3,\cdots ,N\) 。
如: \(1\ 2\ 3\ 4\ 5\ 6\) 对应的关系为
\(1\to 2\ 2\to 3\ 3\to 1\ 4\to 5\ 5\to 4\ 6\to 6\)
windy的操作如下
1 2 3 4 5 6
2 3 1 5 4 6
3 1 2 4 5 6
1 2 3 5 4 6
2 3 1 4 5 6
3 1 2 5 4 6
1 2 3 4 5 6
这时,我们就有若干排 \(1\) 到 \(N\) 的排列,上例中有 \(7\) 排。 现在 windy 想知道,对于所有可能的对应关系,有多少种可能的排数。
Input
一个整数, \(N\)。
Output
一个整数,可能的排数。
Sample Input
3
Sample Output
3
Hint
100% 的数据,满足 \(1 \leq N \leq 1000\) 。
Solution
好骄傲啊,考试手 A 紫题
很容易发现,每个数的变化都有周期,而只有在每个周期都满了时,序列才会还原,也就是排数等于所有周期的最小公倍数加一。
第一个想法是暴力枚举每种周期分布,比如以 \(6\) 为例
\(6=1+1+1+1+1+1\)
\(6=1+1+1+1+2\)
\(6=1+1+2+2\)
\(6=2+2+2\)
\(6=1+1+1+3\)
\(6=1+2+3\)
\(6=3+3\)
\(6=1+1+4\)
\(6=2+4\)
\(6=1+5\)
\(6=6\)
然后求有多少种不同的排数。
但是这样太慢,而且就空间说几个大硬盘都装不下 . . .
必须用方案2了
正解
既然没办法枚举周期分布,那我们就枚举每个周期呗
注意到对于周期 \(a\) 和周期 \(b\ \ \ (\ a\ ,\ b\ )=0\) ,将其分为两个周期 \([a],[b]\) 所需的数 \(a+b\) 个总是比合并为一个周期 \([ab]\) 所需的数 \(ab\) 个少。所以我们要以最优情况入手,及每个周期都为质数的幂( \(p^q\) )。
先打表出 1000 以内的质数,递归枚举每一种成立的方案:各个质数 \(p\) 对应的指数 \(q\) 。那么每个周期就为对应的 \(p^q\) 。
因为两个质数间是互质的,所以每种周期方案也能对应不同的最小公倍数,即排数不同。
因此,得到的方案数就是答案了。
T3 windy数
WA 0/100 分
Description
windy 定义了一种 windy 数。
不含前导零且相邻两个数字之差至少为 \(2\) 的正整数被称为 windy 数。
windy 想知道,在 \(A\) 和 \(B\) 之间,包括 \(A\) 和 \(B\) ,总共有多少个 windy 数?
Input
两个整数, \(A\ B\) 。
Output
一个整数,表示 \(A\sim B\) 中有多少个 windy 数。
Sample Input
1 10
Sample Output
9
Hint
100% 的数据,满足 \(1 \leq A \leq B \leq 2000000000\) 。
Solution
数位 DP 模板题,今天最简单的题我能得最低分 . . .
预处理 \(f_{i,j}\) 代表 \(i\) 位数以 \(j\) 为最高位的 windy 数个数。
分别求出 \(B+1\) 以下和 \(A\) 以下的 windy 数个数(根据预处理的结果,很好计算),然后相减,即为答案。
矩阵
这两天都有矩阵的题目,我总结一下
定义
由 \(m × n\) 个数 \(a_{i,j}\) 排成的 \(m\) 行 \(n\) 列的数表称为 \(m\) 行 \(n\) 列的矩阵,简称 \(m × n\) 矩阵。记作:

这 \(m×n\) 个数称为矩阵 \(A\) 的元素,简称为元,数 \(a_{i,j}\) 位于矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列,称为矩阵 \(A\) 的 \((i,j)\) 元,以数 \(a_{i,j}\) 为 \((i,j)\) 元的矩阵可记为 \((a_{i,j})\) 或 \((a_{i,j})_{m × n}\), \(m×n\) 矩阵 \(A\) 也记作 \(A_{(m,n)}\)。
元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于 \(n\) 的矩阵称为 \(n\) 阶矩阵或 \(n\) 阶方阵。
运算
矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法,减法,数乘,转置,共轭和共轭转置,矩阵还有很重要的乘法运算,在应用中经常出现。
加法
矩阵的加法满足下列运算律( \(A\),\(B\),\(C\) 都是同型矩阵):

应该注意的是只有同型矩阵之间才可以进行加法。
减法

乘法


幂
跟数的幂计算方式一样,也可以用快速幂,在解题中经常用到

浙公网安备 33010602011771号