正睿十一A班模拟赛day2
估分:10+10+10=30
实际:10+10+0=20
T1:
不会,就爆搜10分
随便手玩一下可以发现若有ppi = i,设j = pi,则pi = j,pj = i,我们就说pi和pj匹配。f[i][j]表示前i个数,k个逆序对,如果n和自己匹配,那就转移到f[n-1][k],如果n和n-i匹配,那就转移到n-2,k-2i+1,因为这两个数匹配会产生2i-1个逆序对,那转移方程就出来了。(神奇的是本地测是错的,正睿上测是对的)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 7 typedef long long LL; 8 9 const int N = 510; 10 const LL mod = 998244353; 11 12 LL n, k; 13 LL dp[509][509 * 256]; 14 15 int main() 16 { 17 scanf("%lld%lld", &n, &k); 18 dp[0][0] = 1; 19 for (int i = 1; i <= n; i++) 20 { 21 for (int j = 0; j <= k; j++) 22 { 23 dp[i][j] = dp[i - 1][j]; 24 if (i > 1) 25 { 26 if (j < 2) for (int u = 1; u < i; u++) 27 { 28 int w = 2 * (i - u) - 1; 29 (dp[i][j] += dp[i - 2][j - 2 * i + 1 + 2 * u]) %= mod; 30 } 31 else 32 { 33 (dp[i][j] += dp[i][j - 2] - dp[i - 1][j - 2] + dp[i - 2][j - 1] - dp[i - 2][j - 2 * i + 1]) %= mod; 34 } 35 } 36 } 37 } 38 printf("%lld", (dp[n][k] + mod) % mod); 39 }
T2\T3:
不会
总结:
什么玩意啊,全是计数题,就第一题发现个匹配的规律,然后还是不会写。计数题还是不会写,不知道往什么方面想,做题经验少了
浙公网安备 33010602011771号