正睿十一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 }
View Code

 

T2\T3:

  不会

总结:

  什么玩意啊,全是计数题,就第一题发现个匹配的规律,然后还是不会写。计数题还是不会写,不知道往什么方面想,做题经验少了

posted on 2020-10-07 21:47  ArrogHie  阅读(110)  评论(0)    收藏  举报