首页 > 其他分享 >逆序对数列(P2513) - 题解

逆序对数列(P2513) - 题解

时间:2024-08-12 11:41:36浏览次数:9  
标签:数列 int 题解 sum 样例 P2513 对数 逆序

[HAOI2009] 逆序对数列

原题链接

题目描述

对于一个数列 \(\{a_i\}\),如果有 \(i<j\) 且 \(a_i>a_j\),那么我们称 \(a_i\) 与 \(a_j\) 为一对逆序对数。若对于任意一个由 \(1 \sim n\) 自然数组成的数列,可以很容易求出有多少个逆序对数。那么逆序对数为 \(k\) 的这样自然数数列到底有多少个?

输入格式

第一行为两个整数n,k。

输出格式

写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果。

样例 #1

样例输入 #1

4 1

样例输出 #1

3

提示

样例说明:

下列3个数列逆序对数都为1;分别是1 2 4 3 ;1 3 2 4 ;2 1 3 4;

测试数据范围

30%的数据 n<=12

100%的数据 n<=1000,k<=1000

解析

设 \(f_{i,j}\) 表示长度为 \(i\),逆序对数为 \(j\) 的数列的数量

模拟一个新数加入到数列的过程:

假设原数列为 \(a_1,a_2,...a_{n-1}\),新添加 \(a_n=n\)

因为 \(a_n > a_1,a_2,...a_{n-1}\),所以当把 \(a_n\) 插入原数列的任意一个空隙里,可以使逆序对数最少增加 \(0\)(放在 \(a_{n-1}\) 之后),最多增加 \(n-1\)(放在 \(a_1\) 之前)

所以,设 \(k\) 为每次新增的逆序对数,则有:

\[f_{i,j} = \sum_{k \le i-1\ \rm{and}\ j-k \ge 0}^{k=0}f_{i-1,j-k} \]

时间复杂度 \(O(N^3)\)

观察到上面有 \(f_{i-1,j-k}\) 的形式,所以可以开一个前缀和数组记录 \(\sum_{t \le m}^{t=0}f_{i-1,t}\),每次用前缀和查询 \(\sum_{l \le j}^{l=j-i+1}f_{i-1,l}\) 即可优化成 \(O(N^2)\)

代码

#include<cstdio>
using namespace std;

const int N=5005,K=5005,M=10000;
int n,m,f[N][K],sum[K];

inline int solve(int l,int r)
{
	if(l<0) l=0;
	return (sum[r]-sum[l-1])%M;
}
int main()
{
	scanf("%d%d",&n,&m);
	f[1][0]=1;
	for(int i=2;i<=n;i++)
	{
		sum[0]=1;
		for(int j=1;j<=m;j++)
			sum[j]=sum[j-1]+f[i-1][j]%M;
		for(int j=0;j<=m;j++)
			f[i][j]=solve(j-i+1,j)%M;
	}
	printf("%d\n",f[n][m]%M);
	return 0;
}

标签:数列,int,题解,sum,样例,P2513,对数,逆序
From: https://www.cnblogs.com/jerrycyx/p/18354641

相关文章

  • ABC366F Maximum Composition 题解
    ABC366FMaximumComposition题解题目大意给定\(N\)个一次函数\(f_i(x)=a_ix+b_i\),从中选出\(K\)个函数\(f_{p_1},f_{p_2},\dots,f_{p_K}\),使得\(f_{p_1}(f_{p_2}(\dotsf_{p_K}))\)最大,求最大值。Solve考虑这样一种情况:我已经选定\(p_{k+1},p_{k+1},\dots,p_K\),现......
  • ABC366F 题解
    Solution题意简述现在有\(N\)个线性函数\(f_1,\dots,f_N\)。函数\(f_i(x)=A_ix+B_i\)。找到一个长度为\(K\)的序列\(p=(p_1,\dots,p_k)\),序列元素为\(K\)个大小在\([1,N]\)的不同整数。输出\(f_{p_1}(f_{p_2}(\dotsf_{p_k}(1)\dots))\)可能的最大值。思路贪心......
  • 爱因斯坦求和约定einsum简单例题解读
    概论在爱因斯坦求和约定或einsum()格式字符串中,所有的索引都可以分为两类:自由索引集和求和索引集。它们的区别很简单:自由索引是用于输出规范中的索引。它们与外层for循环相关联。求和索引是所有其他索引:它们出现在参数规范中,但不出现在输出规范中。之所以称为求和索引,是因......
  • ABC366E 题解
    Solution题意简述二维平面上有\(N\)个点\((x_1,y_1),\dots,(x_N,y_N)\)和一个非负整数\(D\)。求有多少对点对\((x,y)\)满足\(\sum\limits_{i=1}^N(|x-x_i|+|y-y_i|)\leD\)。思路发现\(x_i\)与\(y_i\)的捆绑关系不强(其实是几乎没有关联),所以我们分开考虑,也就是先......
  • 记录JSch连接SFTP Exception:Algorithm negotiation fail问题解决
    问题描述:关于正式环境访问外网连接不成功 1、首先检查是否开放防火墙(已确认开放),策略开放后,通过命令连接是否畅通: 通过telnet命令,可以得出,访问畅通。telnet192.168.1.122 2、查看生产环境日志,观察生产环境访问外网服务器异常:抛出异常,提示:算法协商失败com.jcraft.j......
  • [ABC366C] Balls and Bag Query 题解
    [ABC366C]BallsandBagQuery题解题目传送门AT原题传送门首先是题面的翻译:你有一个袋子,给予\(Q\)次操作,操作有三种1\(x\),将一个写有整数\(x\)的球放入袋中。2\(x\),从袋中取出一个写有整数\(x\)的球。3,查询袋中球上的不同整数的数目。整理了一下思......
  • [ABC366D] Cuboid Sum Query 题解
    [ABC366D]CuboidSumQuery题解原题传送门AT原题传送门题意翻译:给予一个\(N\timesN\timesN\)的三维矩阵,有\(Q\)次询问,对于每次询问,给与四个数,分别为\(L_1,R_1,L_2,R_2,L_3,R_3\)求在三维矩阵中\(a[L_1][L_2][L_3]\)到\(a[R_1][R_2][R_3]\)的区间和。三维前缀......
  • 题解:AT_abc366_c [ABC366C] Balls and Bag Query
    题意给你一个可重集,要求支持插入,删除,元素种类查询三种操作。分析直接乱搞,用一个桶记录每种数字的出现次数,再用一个变量\(sum\)记录元素种类数。插入的时候看看当前该元素出现次数是否为\(1\),删除的时候看看当前元素出现次数是否为\(0\),如果是的话让\(sum\)相应加减即可......
  • 题解 P6620【[省选联考 2020 A 卷] 组合数问题】
    直接摘抄OI-wiki了。第二类斯特林数第二类斯特林数(斯特林子集数)\(\begin{Bmatrix}n\\k\end{Bmatrix}\),也可记做\(S(n,k)\),表示将\(n\)个两两不同的元素,划分为\(k\)个互不区分的非空子集的方案数。递推式\[\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1......
  • l洛谷 P7870 兔已着陆——题解
    洛谷P7870题解传送锚点摸鱼环节「Wdoi-4」兔已着陆题目背景铃瑚和清兰是从月之都到达幻想乡的两只月兔。正因为降落到了幻想乡进行调查,因此她们通过开团子屋制作团子出售的方式,在幻想乡生活。为了应对越发繁荣的市场,她们向河城荷取购置了一台团子机器,可以高效地生产出五颜......