标签:mes gif sof 一个 init eps ini 示例 输入
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行2个数n,k。中间用空格分隔。(2 <= n <= 1000, 0 <= k <= 20000)
共T行,对应逆序排列的数量 Mod (10^9 + 7)
1
4 3
6
//容易想到是dp, dp[i][j] 表 i 个数,逆序为 k 的排列的话
dp[i][j] = dp[i-1][j] + dp[i-1][j-1] + dp[i-1][j-2] +... ...+ dp[i-1][j-(i-1)] ( j - i >=0 )
因为 i 这个数,可以插在 i 个空,会增加 0 -- (i-1)个逆序对
而dp[i][j-1] = dp[i-1][j-1] + dp[i-1][j-2] +... ... + dp[i-1][j-1-(i-1)]
两式相减,dp[i][j] = dp[i-1][j] + dp[i-1][j-i]
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define MOD 1000000007 4 #define INF 0x3f3f3f3f 5 #define eps 1e-9 6 #define LL long long 7 #define MX 1002 8 #define MK 20002 9 10 int n,k; 11 int dp[MX][MK]; 12 13 void Init() 14 { 15 dp[0][0]=1; 16 for (int i=1;i<=1000;i++) 17 { 18 int ut = min(i*(i-1)/2,20000); 19 for (int j=0;j<=ut;j++) 20 { 21 dp[i][j]=dp[i][j-1]; 22 dp[i][j]=(dp[i][j]+dp[i-1][j])%MOD; 23 if (j-i>=0) dp[i][j]=(dp[i][j]+MOD-dp[i-1][j-i])%MOD; 24 } 25 } 26 }
标签:mes gif sof 一个 init eps ini 示例 输入
原文地址:http://www.cnblogs.com/haoabcd2010/p/7628812.html