2020.07.25 周作业简要题解

[huge ext{UVA11401} ]

题意

(n) 根木棍,长度为 (1,2,...,n)。用其中三条边构成一个三角形,求方案数。

题解

容易观察到答案的递推公式:

  • (f_i = 0)(当 (i = 1)
  • (f_i = f_{i-1} + k imes (k-1))(当 (i = 2k)
  • (f_i = f_{i-1} + k imes k)(当 (i = 2k+1)

[huge ext{UVA11806} ]

题意

你有一个 (n imes m) 的网格图,现在你要将 (k) 个人放在网格中,满足:

  • 网格图的四个边都至少有一个人。

  • 每个格子上不能有两个人。

  • 每个人必须都有位置。

答案对 (10^6+7) 取模。

题解

简单容斥。

定义 (A,B,C,D)为 第一行 / 最后一行 / 第一列 / 最后一列 没有人的方案,则答案为((C_{n imes m}^{k}) - (A cap B cap C cap D))。

[huge ext{UVA1635} ]

题意

给定数列 (a(|a|=n)),依次计算相邻两数之和得到一个新数列,重复操作,直到数列仅剩一个数。

求这个数除以给定值 (m) 的余数与哪些数无关。

题解

容易观察到原数列中每个数被加的次数是杨辉三角的第 (n) 列。

(m) 分解质因数,依次维护 (C_{n}^{x}) 是否被 (m) 整除即可。可以使用公式:(C_{n}^{i}=C_{n}^{i-1} imes dfrac{(n - i+1)}{i})

[huge ext{UVA1262} ]

题意

给你两个 (6)(5) 列的矩阵,要求你从这之中找出密码,找密码的规则:密码中左数第 (i) 个字母,必须在两个矩阵左数第 (i) 列中均出现。密码长度为 (5)

题解

求出字典序最小的密码,依次迭代即可。与组合数无关。

[huge ext{UVA580} ]

题意

求长为 (n)(01) 序列中有多少个满足:至少有 (3) 个连续的 (1)

题解

(f_i) 表示长为 (i) 时的方案数,分类讨论:

  • 除去新加入的第 (i) 个,序列中已经有 (3) 个连续的 (1) 的方案数:(f_{i-1} imes 2)
  • 除去新加入的第 (i) 个,序列中没有 (3) 个连续的 (1) 的方案数:(2^{i-1} - f_{i-4})

那么,(f_i = f_{i-1} imes 2 + 2^{i-1} - f_{i-4})。边界:(f_3 = 1)

[huge ext{UVA1638} ]

题意

(n) 根长度为 (1)(n) 的棍子排列在一起,求从左边看能看见 (l) 根,从右边看能看见 (r) 根的方案数。

题解

考虑每次放入高度最小的杆子。

(f_{i,l,r}),状态意义如题意,则 (f_{i,l,r}) 可以从以下几种状态转移而来:

  • (f_{i-1,l,r} imes (i-2)) —— 只要不放在左侧和右侧,就看不见这根杆子

  • (f_{i-1,l-1,r}) (f_{i-1,l,r-1}) —— 放在左侧 / 右侧

[huge ext{UVA11538} ]

待补。

[huge ext{UVA1645} ]

题意

求有 (n) 个节点且满足深度相同的节点子树大小相同的树的数量。

题解

定义 (f_i),状态意义如题意。

考虑新加入一个根,剩下的 (i-1) 个节点由若干个相同形态的子树构成,则有:

[f_i = sum limits_{j | (i-1)} f_j ]

[huge ext{UVA1646} ]

题意

(n) 个节点的环上没有公共点的边集个数。

题解

对于一条 (n) 个节点的链上的方案数 (f_n),考虑最后一条边,如果选择它,那么这条边的两个顶点都不能选,有 (f_{n-2}) 种方案;如果不选择它,和 (n-1) 个节点时一样,有 (f_{n-1}) 种方案。

于是我们得到 (f) 的转移方程:

[f_{n} = f_{n-2} + f_{n-1} ]

即 Fibonacci 数列。

在计算答案时,使用相同的套路,分类讨论是否选择环上的一条边 (x)。如果选择了 (x),则有 (f_{n-2}) 种方案。如果不选择,那么相当于组成了一条长度为 (n) 的链,方案为 (f_{n})

[ans = f_n + f_{n-2} ]

当然,OEIS 可以发现答案为 Lucas 数列,但和题目无关,不再阐述。

[huge ext{UVA1649} ]

题意

求所有的对 ((n,k)),使得 (C_{n}^{k} = m)

题解

只考虑 (n geq 2 imes k),因为 (C_{n}^{k} = C_{n}^{n-k})(n < 2 imes k) 的情况可以顺便求出。

考虑枚举 (k),二分 (n)(C_{2 imes k}^{k}) 增长速度极快,所以可以通过非常短的时间计算出答案。

[huge ext{UVA12063} ]

题意

求满足以下条件,长为 (n)(01) 串的数量:

  • 第一位为 (1)
  • 该串对应的十进制数被 (k) 整除
  • (0)(1) 的数量相等

题解

数位 DP。

(F_{i,j,mod}) 表示有 (i)(0) (j)(1) 目前 (mod k = mod) 的方案数。

显然每一步仅两种决策,记忆化搜索转移即可。由于先枚举的是高位,所以设这一步选择的是 (x(x in {0,1})),那么下一步到达的状态应该是 (F_{i+[x=0],j+[x=1],mod imes 2 + x})

原文地址:https://www.cnblogs.com/liuzongxin/p/13378250.html