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

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

  • 计数 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. [2004年NOIP提高组] 合并果子

    在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所 ...

  2. Spring入门之使用 spring 的 IOC 解决程序耦合(Spring环境搭建)(03-01)

    3.1 案例的前期准备 1.使用的案例是:账户的业务层和持久层的依赖关系解决(就是有两个账户实现转账之类的事情,后期继续用这个案例)2.准备环境:在开始 spring 的配置之前,我们要先准备一下环境 ...

  3. 解决通过Eclipse启动Tomcat-Run On Server出现The selection cannot be run on any server

    有时候通过Eclipse启动Tomcat-Run On Server会出现The selection cannot be run on any server的情况如下图: 这是因为没有在eclipse ...

  4. UNIT TWO

    声明 基于8086的寄存器共14个16位的,分别是 ax  bx  cx  dx  (通用寄存器) si  di  bp  sp    (基址与变址寄存器) cs  ss  ds  es   (段寄存 ...

  5. 【python】绘图,颜色,线型

    颜色 最好用的:在网站上找到对应使用十六进制RGB/RGBA字符串表示颜色 可以看颜色及其对应色号名称:https://xkcd.com/color/rgb/ 参考:matplotlib指定绘图颜色的 ...

  6. 微信支付宝app支付回调参数

    微信app支付回调通知参数: <xml><appid><![CDATA[wx9703cd*******]]></appid><attach> ...

  7. Importing the multiarray numpy extension module failed

    使用pyinstall打包含有numpy库的可执行程序后运行报错:Importing the multiarray numpy extension module failed 解决方法:卸载使用pip ...

  8. Abp Abp.AspNetZeroCore 2.0.0 2.1.1 Path

    纯手工修改,移除校验代码可调试. 将文件复制到 %userprofile%\.nuget\packages\abp.aspnetzerocore 目录中 替换对应的文件 Abp.AspNetZeroC ...

  9. resttemplate 由于框架原因自带了转xml方式,不改变框架底层情况下,修复为返回json格式

    RestTemplate httpClientTemplate = new RestTemplate(); List<HttpMessageConverter<?>> conv ...

  10. visio2019 破解

    链接:https://pan.baidu.com/s/14AU8GFXhgjp87pK1bIK8UA?pwd=ju61 提取码:ju61 --来自百度网盘超级会员V5的分享 可能需要关闭防火墙和win ...