bzoj2431:[HAOI2009]逆序对数列

单组数据比51nod的那道题还弱。。。而且连优化都不用了。。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
const int nmax=1e3+5;
const int mod=10000;
int n,k,f[nmax],sm[nmax];
int main(){
    scanf("%d %d",&n,&k);
    rep(i,0,k) sm[i]=1;
    f[0]=1;
    rep(i,2,n){
        rep(j,1,k) {
            if(j-i>=0)   f[j]=(sm[j]-sm[j-i]+mod)%mod;
            else f[j]=sm[j]%mod;
        }
        rep(j,1,k) sm[j]=(sm[j-1]+f[j])%mod;
    }
    printf("%d\n",f[k]);
    return 0;
}

  

2431: [HAOI2009]逆序对数列

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 1682  Solved: 971
[Submit][Status][Discuss]

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

[Submit][Status][Discuss]

 

posted @ 2016-09-09 21:20  BBChq  阅读(175)  评论(0编辑  收藏  举报