这题关键在于写出递推方程:
这里引用另外一位博主的分析截图:
总之好像这样分析是对的...
其实这里我自己还有一种疑问是为什么把新的一根绳子加到i-1根绳子j个圈里面的一个圈,为什么权重只算是1呢,而后面单独成圈和这样的概率都是一样的吗。
仔细想想,好像确实是的,这样理解:新加入了一根绳子要求f[i][j],那它自成圈和加入其他的圈中的概率确实是相等的,而接入到圈里又是可以颠倒顺序的(是这样理解的吗...),所以可以这样算
代码如下所示:
#include <iostream>
using namespace std;
float a[101][101];
int main()
{
a[1][1]=1.0; //形成绳圈的概率
for(int i=2;i<=100;i++) //i为绳子的数目
{
for(int j=1;j<=i;j++) //j为圈数
{
a[i][j]=a[i-1][j]*(2*i-2)/(2*i-1)+a[i-1][j-1]/(2*i-1);
}
}
float max=0.0;
int max_num=1;
for(int i=1;i<=100;i++)
{
if(a[100][i]>max)
{
max=a[100][i];
max_num=i;
}
}
cout << max_num << endl;
// 请在此输入您的代码
return 0;
}