Loading

2020.07.25 周作业简要题解

\[\huge\text{UVA11401} \]

题意

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

题解

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

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

\[\huge\text{UVA11806} \]

题意

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

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

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

  • 每个人必须都有位置。

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

题解

简单容斥。

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

\[\huge\text{UVA1635} \]

题意

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

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

题解

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

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

\[\huge\text{UVA1262} \]

题意

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

题解

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

\[\huge\text{UVA580} \]

题意

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

题解

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

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

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

\[\huge\text{UVA1638} \]

题意

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

题解

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

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

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

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

\[\huge\text{UVA11538} \]

待补。

\[\huge\text{UVA1645} \]

题意

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

题解

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

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

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

\[\huge\text{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\text{UVA1649} \]

题意

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

题解

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

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

\[\huge\text{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 \times 2 + x}\)

posted @ 2020-07-25 21:05  Meatherm  阅读(158)  评论(0编辑  收藏  举报