您的位置:首页 > 其它

最优二叉树的搜索期望代价

2014-11-16 16:57 916 查看
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <memory.h>
using namespace std;
double p[25],q[25],dp[25][25],pp[25][25];

int main()
{
int n;
while (scanf("%d",&n)!=EOF){
for (int i=1;i<=n;i++)
scanf("%lf",&p[i]);
for (int i=0;i<=n;i++)
scanf("%lf",&q[i]);

memset(pp,0,sizeof(pp));
memset(dp,0,sizeof(dp));

for (int i=1;i<=n+1;i++)
{
pp[i][i-1]=q[i-1];
for (int j=i;j<=n;j++)
pp[i][j]=pp[i][j-1]+p[j]+q[j];
}

for (int i=1;i<=n+1;i++)
dp[i][i-1]=q[i-1];

for (int l=1;l<=n;l++)
{
for (int s=1;s+l-1<=n;s++)
{
int ten=s+l-1;
dp[s][ten]=999999.0;
for (int k=s;k<=ten;k++)
dp[s][ten]=min(dp[s][ten],dp[s][k-1]+dp[k+1][ten]+pp[s][ten]);
}
}
printf("%.3f\n",dp[1]
);}
}
<h3>Sample Input:</h3><pre>50.15 0.10 0.05 0.10 0.200.05 0.10 0.05 0.05 0.05 0.10

Sample Output:

2.750

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树