P8386 [PA2021] Od deski do deski 题解

显然是一道计数 dp。

dp 状态应该是最难的一部分了,个人认为这种状态设计得比较巧妙。如果像我刚开始一样设 \(dp_{i,j}\) 表示序列中一共有 \(i\) 个数,序列最后一个数为 \(j\) 的合法方案数的话,那么方程就会变得很不好转移,因为我们不知道当前的 \(j\) 和之前的某些数能不能匹配上,所以我们可以改变状态为 \(dp_{i,j}\) 表示序列中一共有 \(i\) 个数,在当前情况的序列后面加 \(j\) 种数能使序列变为合法序列的方案数。但是有一个问题,就是我们不知道当前合不合法,于是可以再加一维 \(0/1\) 表示当前合法或者不合法。

然后就是状态的转移了。首先需要知道两个很显然的性质:

  • 如果在序列后面加 \(j\) 种数可以使序列变的合法,那么加另外 \(m-j\) 种数就会变得不合法。

  • 并且如果序列 \(S\) 是合法的,那么形如 \(S+x+T+x\) 的序列一定是合法的,形如 \(S+x+T\) 的序列一定是不合法的,其中 \(T\) 是不包含 \(x\) 的任意序列。

于是就可以用刷表法进行转移了,具体转移方程如下:

\(\begin{cases}dp_{i+1,j,1}+=dp_{i,j,1}\times j \\dp_{i+1,j+1,0}+= dp_{i,j,1}\times (m-j) \\dp_{i+1,j,0}+=dp_{i,j,0}\times (m-j) \\dp_{i+1,j,1}+=dp_{i,j,0}\times j \end{cases}\)

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f
#define inf_db 127
#define ls id << 1
#define rs id << 1 | 1
#define re register
#define endl '\n'
typedef pair <int,int> pii;
const int MAXN = 3e3 + 10;
const int mod = 1e9 + 7;
int n,m,dp[MAXN][MAXN][2],ans;
signed main()
{
	cin >> n >> m;
	dp[0][0][1] = 1;
	for(int i = 0;i < n;i++)
		for(int j = 0;j <= i;j++)
		{
			dp[i + 1][j][1] = (dp[i + 1][j][1] + dp[i][j][1] * j) % mod;
			dp[i + 1][j + 1][0] = (dp[i + 1][j + 1][0] + dp[i][j][1] * (m - j)) % mod;
			dp[i + 1][j][0] = (dp[i + 1][j][0] + dp[i][j][0] * (m - j)) % mod;
			dp[i + 1][j][1] = (dp[i + 1][j][1] + dp[i][j][0] * j) % mod;
		}
	for(int i = 0;i <= n;i++) ans = (ans + dp[n][i][1]) % mod;
	cout << ans;
	return 0; 
}

本文作者:Creeper_l

本文链接:https://www.cnblogs.com/Creeperl/p/17913424.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Creeper_l  阅读(30)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
  3. 3 True love tired
  4. 4 一笑江湖 (DJ弹鼓版) 闻人听書_
  5. 5 最好的安排 曲婉婷
  6. 6 星星在唱歌 司南
  7. 7 山川 李荣浩
  8. 8 On My Way Alan Walker
  9. 9 百战成诗 王者荣耀·100英雄官方群像献礼歌
  10. 10 雪 Distance Capper / 罗言
  11. 11 Edamame bbno$ / Rich Brian
  12. 12 半生雪 七叔-叶泽浩
  13. 13 Catch My Breath Kelly Clarkson
  14. 14 Love Is Gone SLANDER / Dylan Matthew
  15. 15 Endless Summer Alan Walker / Zak Abel
  16. 16 悬溺 葛东琪
  17. 17 风吹丹顶鹤 葛东琪
  18. 18 Normal No More TYSM
  19. 19 哪里都是你 队长
  20. 20 Stronger Kelly Clarkson
  21. 21 廖俊涛
  22. 22 消愁 毛不易
  23. 23 The Runner Yubik
  24. 24 踏山河 七叔-叶泽浩
  25. 25 Waiting For Love Avicii
  26. 26 在你的身边 盛哲
  27. 27 Dream It Possible Delacey
  28. 28 凄美地 郭顶
  29. 29 满天星辰不及你 ycc
  30. 30 侧脸 于果
  31. 31 阿拉斯加海湾 蓝心羽
  32. 32 虞兮叹 闻人听書_
  33. 33 离别开出花 就是南方凯
  34. 34 盗墓笔记·十年人间 李常超 (Lao乾妈)
世间美好与你环环相扣 - 柏松
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示