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的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——剪绳子

刷题笔记(17)--整数拆分/剪绳子(动态规划)

bzoj2560串珠子(子集dp)

剑指offer--14-I 剪绳子

BZOJ2560串珠子 状压DP+容斥

AcWing24:剪绳子