BZOJ2431 [HAOI2009]逆序对数列

来源:互联网 发布:视频图片合成软件 编辑:程序博客网 时间:2024/05/16 09:19

f[i][j]表示1~i的排列有j个逆序对的方法数……考虑最后一个数放在哪,f[i][j]=sigma 0<=l<=j&&l<=i-1 f[i-1][j-l]

前缀和优化一下就好

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<vector>#include<map>#include<set>#include<bitset>#include<queue>#include<stack>using namespace std;#define MAXN 1010#define MAXM 1010#define INF 1000000000#define MOD 10000#define eps 1e-8#define ll long longint f[MAXN][MAXN],s[MAXN][MAXN];int n,k;int main(){int i,j,l;scanf("%d%d",&n,&k);f[1][0]=s[1][0]=1;for(i=1;i<=k;i++){s[1][i]=1;}for(i=2;i<=n;i++){f[i][0]=s[i][0]=1;for(j=1;j<=k;j++){if(j-(i-1)-1>-1){f[i][j]=(s[i-1][j]-s[i-1][j-(i-1)-1]+MOD)%MOD;}else{f[i][j]=s[i-1][j];}s[i][j]=(s[i][j-1]+f[i][j])%MOD;}}printf("%d\n",f[n][k]);return 0;}/**/


0 0
原创粉丝点击