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]);
}
不以物喜,不以己悲