题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2431

题意:

  给定n,k,问你有多少个由1~n组成的排列,使得逆序对个数恰好为k个。

题解:

  表示状态:

    dp[i][j] = num of sequences

    i:已经用了1~i之间的数(在这一步放了数字i)

    j:逆序对个数为j

  找出答案:

    ans = dp[n][k]

  如何转移:

    在当前这一步要放数字i。

    所以要将i插入一个由1~i-1组成的排列中。

    若将i插入位置x(0 <= x <= i-1),则新添的逆序对个数为x。

    所以:

      dp[i][j] = ∑ dp[i-1][j-x]

    即:

      dp[i][j] = ∑ dp[i-1][j-i+1 to j]

    由于裸dp复杂度为O(N^3) = O(10^9),所以加一个前缀和优化。

  边界条件:

    dp[1][0] = 1

    others = 0

AC Code:

 // state expression:
// dp[i][j] = num of sequences
// i: considered number i
// j: there is j inversion pairs
//
// find the answer:
// ans = dp[n][k]
//
// transferring:
// dp[i][j] = sigma dp[i-1][j-i+1 to j]
//
// boundary:
// dp[1][0] = 1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005
#define MAX_K 1005
#define MOD 10000 using namespace std; int n,t;
int dp[MAX_N][MAX_K];
int sum[MAX_N][MAX_K]; void read()
{
cin>>n>>t;
} void update_sum(int i,int j,int a)
{
if(j==) sum[i][j]=a;
else sum[i][j]=(sum[i][j-]+a)%MOD;
} int query_sum(int i,int x,int y)
{
if(x==) return sum[i][y];
else return ((sum[i][y]-sum[i][x-])%MOD+MOD)%MOD;
} void solve()
{
memset(dp,,sizeof(dp));
memset(sum,,sizeof(sum));
dp[][]=;
for(int i=;i<=t;i++)
{
sum[][i]=;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=t;j++)
{
dp[i][j]=query_sum(i-,max(,j-i+),j);
update_sum(i,j,dp[i][j]);
}
}
} void print()
{
cout<<dp[n][t]<<endl;
} int main()
{
read();
solve();
print();
}

BZOJ 2431 [HAOI2009]逆序对数列:dp 逆序对的更多相关文章

  1. BZOJ 2431: [HAOI2009]逆序对数列( dp )

    dp(i,j)表示1~i的全部排列中逆序对数为j的个数. 从1~i-1的全部排列中加入i, 那么可以产生的逆序对数为0~i-1, 所以 dp(i,j) = Σ dp(i-1,k) (j-i+1 ≤ k ...

  2. BZOJ 2431 逆序对数列 DP

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列{ai},如果有i< j且ai> ...

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

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

  4. Bzoj 2431 HAOI2009 逆序对数列

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

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

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2431 分析: f(i,j)表示前i个数字逆序对数目为j时候的方案数 那么有f(i,j) ...

  6. BZOJ2431:[HAOI2009]逆序对数列(DP,差分)

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

  7. 【bzoj2431】[HAOI2009]逆序对数列 dp

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

  8. [bzoj2431][HAOI2009][逆序对数列] (dp计数)

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

  9. 【BZOJ2431】【HAOI2009】逆序对数列 DP

    题目大意 问你有多少个由\(n\)个数组成的,逆序对个数为\(k\)的排列. \(n,k\leq 1000\) 题解 我们考虑从小到大插入这\(n\)个数. 设当前插入了\(i\)个数,插入下一个数可 ...

随机推荐

  1. Log4J 基本使用

    Log4j由三个重要的组件 构 成:日志 信息 的优先级,日志信息的输出目的地,日志信息的输出格式. 日志信息的优先级 从高到低有ERROR . WARN . INFO . DEBUG ,分别用来指定 ...

  2. 配置LANMP环境(9)-- 安装Git与vsftp

    一.安装Git 检查是否已经安装 git --version 安装 yum -y install git 二.安装vsftp 检查是否已经安装 yum list installed vsftpd 安装 ...

  3. git学习之简介(一)

    一.前言 史上最浅显易懂的Git教程! 为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指,就是简单得 ...

  4. Live555 中的客户端openRTSP 保存H264文件

    http://amitapba.blog.163.com/blog/static/20361020720140189239762/ http://amitapba.blog.163.com/blog/ ...

  5. UGUI随记

    <color=#ffef00ff>武器</color>:巨剑 <color=#ffef00ff>种族</color>:人族 <color=#ffe ...

  6. C语言基础知识【指针】

    2017年7月11日18:33:41C指针  该看地址:http://www.runoob.com/cprogramming/c-pointers.html1.学习 C 语言的指针既简单又有趣.通过指 ...

  7. eclipse 给jar包关联javadoc

    1.右键点击Referenced Libraries下的jar --> 选择 Build Path --> Configure Build Path. 2.选择jar的Javadoc lo ...

  8. 【BZOJ4928】第二题 树hash+倍增

    [BZOJ4928]第二题 Description 对于一棵有根树,定义一个点u的k-子树为u的子树中距离u不超过k的部分. 注意,假如u的子树中不存在距离u为k的点,则u的k-子树是不存在的. 定义 ...

  9. python的协程和_IO操作

    协程Coroutine: 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行. 注意,在一个子程序中中断,去执行其他子程序,不是函数调用,有点 ...

  10. nginx学习之简化安装篇(一)

    环境:CentOS 6.5 1. 安装依赖环境 [root@localhost ~]# yum install pcre-devel zlib-devel openssl-devel -y 2. 安装 ...