• 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})

  • 相关阅读:
    【JavaScript数据结构系列】04-优先队列PriorityQueue
    【JavaScript数据结构系列】02-栈Stack
    【JavaScript数据结构系列】01-数组Array
    【JavaScript数据结构系列】00-开篇
    2019个人年度总结
    批处理·命令行中常用的操作
    flutter 环境出错后排查
    [图解算法]线性时间选择Linear Select——<递归与分治策略>
    阿里云轻量应用服务器——配置MySQL远程连接(踩坑,LAMP+CentOS)
    [知识复习] C语言文件读写
  • 原文地址:https://www.cnblogs.com/liuzongxin/p/13378250.html
Copyright © 2020-2023  润新知