luogu P6323 [COCI2006-2007#4] ZBRKA |动态规划

题目描述

在一个长度为 \(n\) 的排列中找出逆序对数量恰好为 \(c\) 的排列总数。( \(mod \ 10^9+7\)

输入格式

输入共一行为两个整数 \(n,c\)

输出格式

输出逆序对数量恰好为 \(c\) 的排列总数。( \(mod \ 10^9+7\)

对于 \(100\%\) 的数据,保证 \(1\le n\le 10^3\)\(1\le c\le 10^4\)

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int mod=1e9+7;
int dp[10003],s[10003];
signed main(){
    int n,c;
    cin>>n>>c;
    dp[0]=1;
    for(int i=2;i<=n;i++){
    	s[0]=dp[0];
    	for(int j=1;j<=c;j++) s[j]=(s[j-1]+dp[j])%mod;
    	for(int j=0;j<=c;j++){
    		if(j-i>=0)dp[j]=(s[j]-s[j-i]+mod)%mod;
    		else dp[j]=s[j];
		}
    }
    printf("%d\n",dp[c]);
}
posted @ 2022-01-13 20:15  白木偶君  阅读(77)  评论(0编辑  收藏  举报