LQ0215 绳圈DP
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0215 绳圈DP相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2014初赛 C++ C组G题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
今有 100 根绳子,当然会有 200 个绳头。
如果任意取绳头两两配对,把所有绳头都打结连接起来。最后会形成若干个绳圈(不考虑是否套在一起)。
我们的问题是:请计算最后将形成多少个绳圈的概率最大?
问题分析
DP问题。
AC的C语言程序如下:
/* LQ0215 绳圈 */
#include <stdio.h>
#include <string.h>
#define N 100
double dp[N + 1];
int main()
memset(dp, 0, sizeof dp);
dp[1] = 1;
for (int i = 2; i <= N; i++)
for (int j = i; j >= 1; j--)
dp[j] = (dp[j] * (2 * i - 2) + dp[j - 1]) / (2 * i - 1);
double maxv = -1.0;
int cnx;
for (int i = 1; i <= N; i++)
if (dp[i] > maxv)
maxv = dp[i], cnx = i;
printf("%d\\n", cnx);
return 0;
以上是关于LQ0215 绳圈DP的主要内容,如果未能解决你的问题,请参考以下文章