HDU 1520:Anniversary party 树形DP基础

Posted kiuhghcsc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1520:Anniversary party 树形DP基础相关的知识,希望对你有一定的参考价值。

Anniversary party

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1520

题意:

公司里有一堆人再开派对,每个人有一个欢乐值,这些人之间有一些上下级关系,每个人都不想和他的直接上司(即是父亲,不包括祖先)同时出现在party上,求party上最大的欢乐值的合。

 

题解:

由题意知公司成员之间可以组成一棵关系树,设value[x]为以x为根节点的子树的最大权值合,child[x]为x的子节点,从树上可以看出,value[x]=max(value[x]+∑value[child[child[x]]],∑value[child[x]])

             

代码

#include<stdio.h>
#include<string.h>
const int N=20;
double dp[1<<N],p[N],x;
int main()
{
  int n;
  while(~scanf("%d",&n))
  {
    dp[(1<<n)-1]=0.0;
    for(int i=0;i<n;++i)
    scanf("%lf",&p[i]); 
    for(int j=(1<<n)-2;j>=0;--j)
    {
      x=0;dp[j]=0.0;
      for(int k=0;k<n;++k)
      {
        if(!((1<<k)&j))
        dp[j]+=dp[j+(1<<k)]*p[k],x+=p[k];
      }
      dp[j]=(dp[j]+1.0)/x;
    }
    printf("%.5f\n",dp[0]);
  }
}

  

以上是关于HDU 1520:Anniversary party 树形DP基础的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1520 Anniversary party

HDU-1520 Anniversary party (树形DP)

HDU - 1520 Anniversary party (有向入门树形DP)

HDU1520 Anniversary party 树形DP基础

hdu 1520 Anniversary party(第一道树形dp)

HDU 1520 Anniversary party