首页 > 其他分享 >[ABC132F] Small Products 题解

[ABC132F] Small Products 题解

时间:2024-08-21 10:48:46浏览次数:9  
标签:lfloor cnt frac int 题解 rfloor Products Small dp

题意

一句话题意不用再翻译了吧。

思路

先考虑朴素的 dp,设 \(dp_{i,j}\) 表示长度为 \(i\) 结尾数字为 \(j\) 的序列的方案数,状态很好转移:

\[dp_{i,j}=\sum_{a=1}^{\lfloor \frac{N}{j} \rfloor}dp_{i-1,a} \]

这样时间复杂度是 \(\Theta(nk)\) 的,显然过不了。

考虑优化这个 dp
我们发现 \(\lfloor \frac{N}{j} \rfloor\) 在一段区间内的值是一样的,自然想到整除分块。
我们预处理出每一块的 \(\lfloor \frac{N}{j} \rfloor\) 值 \(m_i\)、长度 \(len_i\) 和块的个数 \(cnt\),这时的状态转移如下:

\[dp_{i,j}=\sum_{j=1}^{cnt}dp_{i,j-1}+dp_{i-1,cnt-j+1}\times len_{j} \]

这里状态中的 \(j\) 表示第 \(j\) 块。

时间复杂度 \(\Theta(\sqrt{n}k)\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,m;
int dp[105][100005];
int a[100005],len[100005],cnt;
signed main(){
    scanf("%lld%lld",&n,&m);
    for(int l=1,r;l<=n;l=r+1){
        r=(n/(n/l));
        a[++cnt]=r;
        len[cnt]=r-l+1;
    }
    for(int i=1;i<=cnt;i++) dp[0][i]=1;
    for(int i=1;i<=m;i++){
        int d=cnt;
        for(int j=1;j<=cnt;j++){
            dp[i][j]=(dp[i][j-1]+len[j]*dp[i-1][d--]%mod)%mod;
        }
    }
    printf("%lld",dp[m][cnt]);
    return 0;
}

标签:lfloor,cnt,frac,int,题解,rfloor,Products,Small,dp
From: https://www.cnblogs.com/PerchLootie/p/18371166

相关文章

  • [ABC156E] Roaming 题解
    前言这哪有蓝,评分似乎有点过了。思路既然是要统计每个房间人数的排列,那我们就枚举把所有人都放到\(i\)个房间里的方案数,这个用插板法解决,把所有人都放到\(i\)个房间里也就是把他们分成\(i\)份,这一部分的答案就是在\(n\)个人的\(n-1\)个空中插入\(i-1\)块隔板的方案......
  • 题解:P10724 [GESP202406 七级] 区间乘积
    思路当一个数是完全平方数的时候,它的所有质因子的次数都是偶数。记\(x\)的质因子为\(p_1^{q1}\timesp_2^{q2}\timesp_3^{q3}...\timesp_v^{qv}\)。这些数可以通过次数的奇偶性用一个\(v\)位的二进制串\(B\)表示,\(B_i\)为\(0\)说明\(q_i\)为偶数,\(B_i\)为\(......
  • [题解]P3311 [SDOI2014] 数数
    P3311[SDOI2014]数数看到多模式匹配,我们考虑先对所有模式串建立AC自动机。然后发现这道题和P4052文本生成器(题解)挺像的,后者让求包含至少一个模式串的个数,这道题让求一个也不包含的个数,这个就是一个用不用\(26^m\)去减的问题,很好处理。但这道题还多了一个条件,“幸运数”必须\(......
  • Prometheus部署以及问题解决
    Prometheus作用:Prometheus监控(PrometheusMonitoring)是一种开源的系统监控和警报工具。它最初由SoundCloud开发并于2012年发布,并在2016年加入了云原生计算基金会(CNCF)。Prometheus监控旨在收集、存储和查询各种指标数据,以帮助用户监视其应用程序和系统的性能和运行状态。部署流......
  • 题解:CF454B Little Pony and Sort by Shift
    题目描述题目传送门给定一个长度为$n$的数组$a$,每次可以将最后一个元素移动到第一个,问:至少需要几次操作,让序列从小到大排好序,若无解输出$-1$。算法1(暴力枚举)不难想到,将最后一个元素拼接在第一个元素之前,就可以实现将链转换成环,再依次遍历在数组$a_i$中长度为$n$的......
  • Postman中Body添加注释后请求报错问题解决【保姆级教程!!!】
    本文介绍关于Postman中Body添加注释后请求报错问题解决方法如:请求返回下述报错操作失败!系统异常,JsonParseException:Unexpectedcharacter(‘/’(code47)):maybea(non-standard)comment?(notrecognizedasonesinceFeature‘ALLOW_COMMENTS’notenabled......
  • P2261 [CQOI2007] 余数求和 题解
    题目传送门思路数学数学非常经典的题目注意到\(k\bmodi=k-\lfloork/i\rfloor*i\)。于是可以对题目进行转化,从求\(G(n,k)=\sum_{i=1}^kn\bmodi\)变为求\(G(n,k)=n\timesk-\sum_{i=1}^n\lfloork/i\rfloor\timesi\),所以仅需求出\(\sum_{i......
  • 题解:AT_jag2016secretspring_b 豪邸と宅配便
    思路设\(T\)为总时间。由于第一次太郎一定会花\(m\)时间到达门口,所以\(t\)要先减去\(m\)。之后太郎就有两种选择在门口等待下一个快递,时间花费为\(a_i-a_{i-1}\)。回书房,学习一会,再拿快递,时间花费为\(2\timesm\)。则最优时间花费为\(\min(2\timesm,a_i-a_{i-1}......
  • 题解:CF362A Two Semiknights Meet
    题意有两个走法为中国象棋象的棋子,棋盘上有一些坏格子,问它们是否可以在好格子相遇。思路则判断两个棋子是否相遇有两个条件是否可以在一个格子相遇。那个格子是否是好格子。先考虑条件\(1\)设第一个棋子的坐标为\(a_x\)和\(a_y\),第二个棋子的坐标为\(b_x\)和\(b_y......
  • NOI2003 逃学的小孩 题解
    NOI2003逃学的小孩题解传送门。题目简述给定一棵树\(T\),需要选择三个点\(A,B,C\),需要从\(C\)走到\(A,B\)​​的最远距离。(第一段题目是在讲剧情吗。。)前置知识图树树的直径思路简述这题在蓝题(提高+/省选-)中还是比较水的^_^来看看样例吧用瞪眼法(——数学......