• POJ 3557 Map Generator [概率DP]


      给出N个点,生成每条边的概率是pi,问生成一幅连通图的期望。

      一开始正着想,感觉很复杂,无从下手,看了题解才发现原来是反过来思考的。。d[i]表示生成i个点的连通图的概率,那只要求出对应的不连通的概率,然后一减就可以了。生成不连通图的情况,就是从i-1个点中,选出1~n-1个点,选出的点和i连通而和其它点不连通,把所有的概率加起来就是生成不连通图的概率。。

      

     1 #include <string.h>
     2 #include <stdio.h>
     3 #include <math.h>
     4 int n;
     5 double p, d[30], c[31][31];
     6 void init(){
     7     for (int i = 0; i < 31; c[i++][0] = 1)
     8         for (int j = 1; j <= i; j++)
     9             c[i][j] = c[i-1][j-1] + c[i-1][j];
    10 }
    11 int main(){
    12     init();
    13     while (scanf("%d%lf", &n, &p) != EOF) {
    14         for (int i = 1; i <= n; i++) {
    15             double tmp = 0;
    16             for (int j = 1 ; j < i; j++) {
    17                 tmp += c[i-1][j-1]*d[j]*pow(1-p,j*(i-j));
    18             }
    19             d[i] = 1 - tmp;
    20         }
    21         printf("%.10f\n",d[n]);
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    win8及win8.1商店出现0X80073CF9的解决办法!
    Ubuntu 14.04 登陆界面循环问题解决
    Java学习笔记-Json
    Java学习笔记-Thread-线程
    git学习笔记
    Java学习笔记-File
    java学习笔记-set
    C# 实验4 数据库
    C#文件处理
    C#-实验3
  • 原文地址:https://www.cnblogs.com/swm8023/p/2697550.html
Copyright © 2020-2023  润新知