• 对模拟的过程不敏感,对范围的数字不敏感

  • 手玩是发现规律的好方式

  • 计数 dp 以及一众计数题是明显短板,需要加紧突破。

样例解释已经较为明显地提示了这道题的大致做法。对于计数题,有动归与组合数学两种方法。但这道题并不是很能推式子,所以采用动态规划。

我们需要统计 \(0\) 到 \(m\) 每个元素的个数,所以要有一维记录当前推到第几个元素。

答案与整数 \(S\) 有较大关联,我们需要一维记录当前递推到 \(S\) 第几位。

发现根据上面两维无法表示 \(1\) 的 数量不超过 \(k\) 个,于是要再开一维表示当前 \(S\) 有几个 \(1\)。

但是由于每个点可以选多次,所以我们只凭这些,最终 \(1\) 的个数还是无法确定。

我们得到了一个半成品数组,\(dp_{i,j,k}\) 表示当前推到第 \(i\) 个元素,推到第 \(j\) 位,当前有 \(k\) 个 \(1\) 的答案。

如果你推到这里卡住了,没有关系。你需要的是查看一众 NOI 拿金游记并睡一觉。

试着根据这个半成品数组设计转移方程,我们发现由于有 \(1\) 的个数存在,并不是很好推这个状态是由哪些状态转移而来得到,但我们只需枚举当前第 \(i\) 个元素选了几个,就可以推出这个状态对后面状态的贡献。通过枚举选了 \(t\) 个,我们可以得出当前的位是 \(0\) 还是 \(1\),但是尽管同样是 \(1\),选 \(1\) 个和选 \(3\) 个还是有很大的不同的。这会影响下一位的值,也许还会影响下下位的。

发现实际上,这个影响取决于进位的多少。所以我们还需要一维,表示当前一位要向后进多少的值。

成品数组产生了:\(dp_{i,j,k,w}\) 表示当前推到第 \(i\) 个元素,推到第 \(j\) 位,当前有 \(k\) 个 \(1\) ,且要向下一位进 \(w\) 的值。显然, \(w\) 最大就是 \(n\),因为当前元素最多选 \(n\) 个。

贡献是多少?\(dp_{i,j,k,w}\) 实际上就是一种方案的权值乘上这种方案产生的序列个数。显然,现有的权值要乘上 \(p_i\)。产生的序列个数就是在选剩的格子里(共 \(n-j\) 个)选 \(t\) 个填上的方案乘上原来的方案。根据结合律可得:

f[i + 1][j + t][w + ((t + p) % 2)][(t + p) / 2] += ((((f[i][j][w][p] * qp[i][t]) % mod) * C[n - j][t]) % mod);

最后统计答案时要注意,第 \(n\) 位的进位也要加以判断。实际上就是求进位数的 popcount ,如果这个和原来的 \(k\) 加起来不大于题目要求才可被统计。

P7961 数列 题解的更多相关文章

  1. [HNOI2009]有趣的数列 题解(卡特兰数)

    [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满 ...

  2. BZOJ1500:[NOI2005]维修数列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1500 https://www.luogu.org/problemnew/show/P2042#su ...

  3. 洛谷 P4108 / loj 2119 [HEOI2015] 公约数数列 题解【分块】

    看样子分块题应该做的还不够. 题目描述 设计一个数据结构. 给定一个正整数数列 \(a_0, a_1, \ldots , a_{n-1}\),你需要支持以下两种操作: MODIFY id x: 将 \ ...

  4. P1962 斐波那契数列-题解(矩阵乘法扩展)

    https://www.luogu.org/problemnew/show/P1962(题目传送) n的范围很大,显然用普通O(N)的递推求F(n)铁定超时了.这里介绍一种用矩阵快速幂实现的解法: 首 ...

  5. 洛谷P1962 斐波那契数列题解

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...

  6. 洛谷 P2401 不等数列 题解

    每日一题 day25 打卡 Analysis dp[i][j]=dp[i-1][j-1]*(i-j)+dp[i-1][j]*(j+1); 其中i和j是表示前i个数中有j个小于号,j<=i-1 要 ...

  7. 洛谷P2401 不等数列 题解

    可食用的题目链接 题解: 有题目得:这个题有巧做法而不是暴力模拟.废话 这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种. 我们设已经得到了n-1个数的总方法(1~n-1) ...

  8. 洛谷 P1438 无聊的数列 题解

    原题链接 首先,我们考虑用差分解决问题. 用 \(x_i\) 表示原数列,\(a_i = x_i - x_{i-1}\) 那么,先普及一下差分: 如果我们只需要维护区间加值,单点求值的话,你会发现两个 ...

  9. P1062 数列 题解

    (题目为啥要强调用十进制输出呢,明明就是故意提醒) 分析一下样例 k=3k=3时,数列为:1,3,4,9,10,12,13..1,3,4,9,10,12,13.. 转换成三进制就是:1,10,11,1 ...

  10. 【HEOI2015】公约数数列 题解(分块)

    前言:毒瘤数据结构题,半个下午都在搞它了…… --------------------------- 题目链接 题目大意:给定一个长度为$n$的序列,有两种操作:1.把$a_x$的值改成$y$.2.求 ...

随机推荐

  1. Write down for Segments, Extents, and Blocks

    Segments, Extents, and Blocks(段.区.块) • Segments exist in a tablespace. • Segments are collections of ...

  2. c++ thread, 模板类,锁的调用实例

    #include<thread> #include<condition_variable> #include<mutex> #include<queue> ...

  3. 5.26 学习SSH

    1.ssh客户端是一种使用Secure Shell协议 连接到运行了ssh服务端的远程服务器上 ssh是比较可靠的,专为远程登录会话和其他网络服务提供安全性的协议 2.

  4. pycharm的安装与使用

    官网下载最新版本,然后用激活码,激活,注意是专业版. 方法找到后更新在这里. 进入软件之后创建新的文件夹,可以自定义,建议自定义在系统盘以外, 1.新建文件略过 2.ctrl + 鼠标中键, 调节字体 ...

  5. vite+vue3批量导入静态资源图片;动态绑定大量图片

    vite版本:vite3:vue版本:vue3 打包上线后发现,动态绑定的图片皆失效. 单图可用 import 导入解决,但是若有大量图片,一一导入则耗时耗力. vue2+webpack 可用 req ...

  6. Leetcode61

    !!Given the head of a linked list, rotate the list to the right by k places.!!   # Definition for si ...

  7. Python使用双层列表推导式输出九九乘法表

    print('\n'.join([' '.join(['%2d *%2d = %2d' % (col, row, col * row) for col in range(1, row + 1)]) f ...

  8. Spring RedisTemplate源码解读

    RedisTemplate类位于项目spring-data-redis-xxx的包org.springframework.data.redis.core下,是我们在Spring框架下操作Redis数据 ...

  9. Winform多线程访问UI控件问题

    Winform多线程无法访问UI控件,考虑使用委托方法解决.

  10. 在uni-app中调用高德地图去导航

    1.判断一下是不是在微信环境 2.微信环境调用微信自带的地图导航 3.h5环境跳转去高德地图 guide() { let self = this; console.log("self.lat ...