首页 > 其他分享 >「题解」ABC292G Count Strictly Increasing Sequences

「题解」ABC292G Count Strictly Increasing Sequences

时间:2023-05-31 12:23:53浏览次数:54  
标签:Count 题解 Strictly Increasing ABC292G dp

没一眼看出来还是拉了。

考虑区间 dp,\(f_{i,l,r}\) 表示 \([l,r]\) 前 \((i-1)\) 位都相同,看后面 \([i,n]\) 位填数使得递增的方案数是多少。

这样已经可以做了,但是还不够,要追求一下最简单的写法。想想,发现每次 dp 是要分为多个儿子乘起来,内部还要搞个 dp。但可以改成每次两个儿子乘起来的方式,那就是 \(f_{i,l,r,k}\),\(k\) 表示第 \(i\) 位要填 \(\geq k\),其余含义仍不变。

这样子就枚举 \(k\) 填了哪个前缀,时间复杂度是 \(\mathcal{O}(n^4|\Sigma|)\),采用记忆化搜索的写法。

Code

标签:Count,题解,Strictly,Increasing,ABC292G,dp
From: https://www.cnblogs.com/do-while-true/p/17445758.html

相关文章

  • [TSG开发]法如扫描仪SDK探幽-1.旧版SDK采集流程、问题解析、常见参数
    做什么法如扫描仪是一个三维的激光扫描仪,可以通过特定的作业模式将空间以三维激光点云的形式保存下来,并且通过特定的算法得出一些想要的具体参数。这个SDK探幽日志主要是对目前SDK开发中遇到的一些问题做个记录,以及对未来开发的一些指导,只是在业余时间简单写写,之后还会深入探索......
  • CF6E Exposition 题解 ST表+倍增
    题目大意:求所有极差不超过\(k\)的最长连续子序列。解题思路:先开一个ST表方便求解区间最大值和区间最小值。然后基于倍增思想(详见cal函数)求极差不超过\(k\)的最长连续子序列。示例程序:#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e5+5;int......
  • yulong-hids 规则引擎,目前看到就是正则表达式和count技术
    规则项目提供的默认规则太简单和宽泛了,甚至包含一些错误,比如:有些不太精确,比如:另外规则引擎的匹配算法没有做优化,规则或者事件一旦多起来,server的负载会很高有些太宽泛导致误报非常高:agent在测试机才装2天就有近6w条告警,这是无法运营的,当然,规则支持细粒度控制(开关)还是很不错的3、功......
  • Codeforces Round #548 (Div. 2) 题解
    题目链接http://codeforces.com/contest/1139 A.EvenSubstrings判断个位是否是奇数即可。#include<iostream>#include<set>#include<array>#include<vector>usingnamespacestd;typedeflonglongll;constintmx=1e5+10;lldp[mx][2];charstr[......
  • 牛客想开了大赛2 题解
    题目链接:https://ac.nowcoder.com/acm/contest/907#question A.【六】平面公式:(n*n+n)/2+1,n为直线数目B.【一】n的约数枚举质因子和每个质因子的个数,显然个数肯定从多到少。#include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;constintmx=1e4+10;in......
  • Codeforces Round #594 (Div. 2) 题解
    题目链接:https://codeforces.com/contest/1248 A-IntegerPoints水题#include<bits/stdc++.h>usingnamespacestd;constintmx=1e5+5;typedeflonglongll;inta[mx],b[mx];intmain(){ intt; scanf("%d",&t); while(t--){ intn,m; scan......
  • Codeforces Round #599 (Div. 2) 题解
    题目链接:https://codeforces.com/contest/1243 A-MaximumSquare水题不说了#include<bits/stdc++.h>usingnamespacestd;constintmx=1e5+50;typedeflonglongll;intn;inta[mx];intmain(){ intt; scanf("%d",&t); while(t--){ scan......
  • 题解 AT_nikkei2019ex_e【コラッツ問題】
    啥玩意,诈骗题还能这么诈骗。\(f(X)\)就是角谷猜想(冰雹猜想)所需的步数。根据角谷猜想,定义函数\(g\):\[g(X)=\begin{cases}\frac{X}{2},&2\midX\\3X+1,&2\nmidX\end{cases}\]则显然有\(f(g(X))=f(X)-1\)。样例二已经给出了\(f(X)=1000\)的解\(X=1789997546303\),而\(P......
  • P9376 题解
    首先考虑怎么暴力。考虑把每个数进行\(B\)进制分解,然后我们惊奇的发现这两个操作就是把最低位去掉和往最低位后面插入一个数。然后我们顺藤摸瓜,把每个数的分解扔到Trie树上,我们发现我们要找到一个节点,使得所有单词节点到其的距离之和最短,答案就是这个最短距离。这里直接考......
  • CODE FESTIVAL 2016 qual B E 题解
    以下\(\Sigma\)为字符集。首先单次询问\(O(|\Sigma||S|)\)的暴力是显然的:建出trie树,然后每次把对应的字符串在上边扫,加上对应位置比它小的子树的大小。然后接下来有两种方法。正解首先在线大概是没什么前途的,考虑离线,建出trie树之后在上边dfs,处理挂在每个节点上的询......