1 条题解
-
0
题意分析
求把个身高各不相同的孩子排成一队,有m组可以说话的排法(两个孩子相邻,或者两者之间的其他人身高都比自己矮则可以说话)
解题思路
表示把 个孩子分成 组可以说话的分法,从个孩子中拿出最矮的那一个,则还剩下 人,而身高最矮的这个孩子,有两种放置方法——1)放在其他任意两个人之间,则这只队伍增加了两组可以说话的人,有个放法(可以用人少时找规律)2)放在边上,则增加了一组可以说话的人,有两种放法(队列的头,尾)。
可得出递推公式——;
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> const int maxm = 10000 + 10; const int maxs = 80 + 10; using namespace std; int dp[maxs][maxm]; int n, m; int main() { while (~scanf("%d%d", &n, &m) && n) { dp[1][0] = 1; dp[2][1] = 2; for (int i = 1; i <= n; i++) for (int j = 2; j <= m; j++) { dp[i][j] = (dp[i - 1][j - 2] * (i - 2) + 2 * dp[i - 1][j - 1]) % 9937; } printf("%d\n", dp[n][m]); } return 0; }
- 1
信息
- ID
- 2927
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者