您的位置:首页 > 其它

[BZOJ2431] [HAOI2009]逆序对数列

2016-02-24 18:00 85 查看

传送门

http://www.lydsy.com/JudgeOnline/problem.php?id=2431

题目大意

给定n,mn,m询问由11~nn构成的逆序对数为m的方案数

题解

dp[i,j]:dp[i,j]:由11~ii组成含jj个逆序对数的方案数

dp[i,j]=∑jmax(0,j−i+1)dp[i−1,j−k]dp[i,j]=\sum_{max(0,j-i+1)}^jdp[i-1,j-k]

前缀和优化一下

const
maxn=1005;
var
sum,dp:array[0..maxn,-1..maxn]of longint;
i,j,k:longint;
n,m:longint;
function max(a,b:longint):Longint;
begin if a>b then exit(a) else exit(b); end;

begin
readln(n,m);
for i:=1 to m do
dp[0,i]:=0;
dp[0,0]:=1;
sum[0,-1]:=0;
for i:=0 to m do
sum[0,i]:=sum[0,i-1]+dp[0,i];
for i:=1 to n do
begin
sum[i,-1]:=0;
for j:=0 to m do
begin
dp[i,j]:=(sum[i-1,j]-sum[i-1,max(j-i,-1)]+10000)mod 10000;
sum[i,j]:=(sum[i,j-1]+dp[i,j]+10000)mod 10000;
end;
end;
writeln(dp[n,m]);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: