2431: [HAOI2009]逆序對數列

考慮直接把答案作爲狀態進行DP(遞推)

f[i][j]表示1~i產生j個逆序對數的可能有多少種。

對於第i個數,顯然他比1~i之間的數都要大,所以容易得出狀態轉移方程:

f[i][j]=sum(f[i-1][k])

然後就好了。。

上代碼(好短)

#include<cstdio>
using namespace std;
const int MOD=10000;
int f[2000][2000];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    f[1][0]=1;
    for(int i=2;i<=n;i++)
        for(int j=0;j<=m;j++)
            for(int k=0;k<=i-1;k++)
            f[i][j]=(f[i][j]+f[i-1][j-k])%MOD;
    printf("%d",f[n][m]);
    return 0;
}
      


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章