3 ≤ n ≤ 20, 1 ≤ t ≤ 10

如此小的数据接下来就能各种暴力了===

dp[i][j][k][t1][t2]表示前i个字符的最后两个是j和k已有t1个峰t2个谷

枚举当前放的数,转移方程容易思考了=

复杂度是20*4*4*10*10*4==轻松过啊

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int dp[21][5][5][11][11];
 6 int main()
 7 {
 8   int ans,n,t,i,j,k,x,y,l;
 9   scanf("%d%d",&n,&t);
10   memset(dp,0,sizeof(dp));
11   for (i=1;i<=4;i++)
12     for (j=1;j<=4;j++) dp[2][i][j][0][0]=i!=j;
13   for (i=3;i<=n;i++)
14     for (j=1;j<=4;j++)
15       for (k=1;k<=4;k++)
16           for (x=0;x<=t;x++)
17             for (y=0;y<=t;y++)
18               for (l=1;l<=4;l++)
19                 if (k!=l)
20     dp[i][k][l][x+(j<k&&k>l)][y+(j>k&&k<l)]+=dp[i-1][j][k][x][y];
21   ans=0;
22   for (i=1;i<=4;i++)
23     for (j=1;j<=4;j++) ans+=dp[n][i][j][t][t-1];
24   printf("%d\n",ans);
25   return 0;
26 }
View Code

相关文章:

  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2022-01-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-11
  • 2021-08-31
  • 2021-09-21
  • 2021-05-14
  • 2022-01-16
相关资源
相似解决方案