2431: [HAOI2009]逆序对数列

2431: [HAOI2009]逆序对数列

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 954  Solved: 548
[Submit][Status]

Description

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

Input

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

Output

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

 

Sample Input

样例输入

4 1

Sample Output

样例输出

3

样例说明:

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

测试数据范围

30%的数据 n<=12

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

HINT

Source

Day1

题解:乍一看看到逆序对个数这样的字眼,还有些小激动呢,再一看,居然是个DP(Phile:呵呵 HansBug:TT)——这个嘛,递推式也很明显——f[i,j]:=f[i-1,1]+f[i-1,2]+f[i-1,3]....+f[i-1,j],所以直接求吧(注注注注注意:记得%10000,还有%10000时先加个10000以防万一)

 1 var
 2    i,j,k,l,m,n:longint;
 3    a:array[0..2000,0..2000] of longint;
 4 begin
 5      readln(n,m);
 6      fillchar(a,sizeof(a),0);
 7      for i:=1 to n do
 8          a[i,0]:=1;
 9      for i:=2 to n do
10          begin
11               l:=a[i-1,0];
12               for j:=1 to m do
13                   begin
14                        if not(j<i) then l:=l-a[i-1,j-i];
15                        l:=l+a[i-1,j];
16                        a[i,j]:=(l+20000) mod 10000;
17                   end;
18          end;
19      writeln(a[n,m]);
20 end.          
时间: 2024-12-21 01:55:08

2431: [HAOI2009]逆序对数列的相关文章

[bzoj 2431][HAOI2009]逆序对数列(递推+连续和优化)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2431 分析: f(i,j)表示前i个数字逆序对数目为j时候的方案数 那么有f(i,j)=∑f(i-1,k)  j-i+1<=k<=j 看似是n*k*k的,但是注意对于每一个i,当j=j+1时候,结果只是f(i,j)基础上加了一个f(i-1,j+1),所以就是n*k的了

BZOJ 2431: [HAOI2009]逆序对数列【dp】

Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? Input 第一行为两个整数n,k. Output 写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果.   Sample Input样例输入 4 1 Sample Output样例输出 3 样例说明: 下列3个数列逆序对

BZOJ 2431 HAOI2009 逆序对数列 递推

题目大意:求1~n的所有排列中有多少种逆序对为k的方案数 令f[i][j]为前i个数的排列中逆序对数为j的方案数 那么我们将第i个数插入1~i-1的排列中 可以产生0~i-1个逆序对 于是有 f[i][j]=Σf[i-1][k] (j-i+1<=k<=j) 维护前缀和即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 1010

bzoj 2431: [HAOI2009]逆序对数列

一个比较弱智的DP 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #include<queue> 7 #include<algorithm> 8 #include<vector> 9 #define M 1009 10 #define EPS 1e-10 11

bzoj2431: [HAOI2009]逆序对数列(前缀和优化dp)

2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2312  Solved: 1330[Submit][Status][Discuss] Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? Input 第一行为两个整数n,k. Ou

BZOJ2431: [HAOI2009]逆序对数列

2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 473[Submit][Status] Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? Input 第一行为两个整数n,k. Output 写入一个整数,

BZOJ-2431: [HAOI2009]逆序对数列 (傻逼递推)

2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2401  Solved: 1389[Submit][Status][Discuss] Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? Input 第一行为两个整数n,k. Ou

bzoj千题计划153:bzoj2431: [HAOI2009]逆序对数列

http://www.lydsy.com/JudgeOnline/problem.php?id=2431 dp[i][j] 表示i的排列,有j个逆序对的方案数 加入i+1,此时i+1是排列中最大的数, 所以放在i+1后面的所有数都会与i+1形成逆序对 转移方程:dp[i][j]=Σ dp[i-1][j-k]  k∈[0,min(j,i-1)] 前缀和优化 朴素的DP #include<cstdio> #include<algorithm> using namespace std;

洛谷P2513 [HAOI2009]逆序对数列

P2513 [HAOI2009]逆序对数列 题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? 输入输出格式 输入格式: 第一行为两个整数n,k. 输出格式: 写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果. 输入输出样例 输入样例#1: 4 1 输出样例#1: 3 说明 样例说明: