【DP】bzoj1002

来源:互联网 发布:恒泰实达程序员怎么样 编辑:程序博客网 时间:2024/06/07 20:58
题干:

轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示

  N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示

  现给定n(N<=100),编程计算有多少个不同的n轮状病毒

网上看了很多行列式的解法,觉得自己的数学姿势水平有限,于是还是觉得DP靠谱(据说可以推规律,但是我觉得这个题打表很暴躁啊。。。。。

于是d[i][0]表示i没有和中心点相连,dp[i][1]表示i和中心点相连
dp[i][0]=dp[i-1][0]+dp[i-1][1] 如果前面也不相连,那必须和i连边,如果前面和中心点相连,那么一定不能连边(因为定义就是i点和中心点不相连,
dp[i][1]=dp[i-1][0]+2*dp[i-1][1];如果前面不相连,那么只能前面先和i连再和中心点连,如果前面相连,那么可以前面连i,或者i直接和中心点相连。

嘛环拆链的dp还是做得少,太年轻了

顺便记录一下生成树计数的做法,
一个无向图的生成树个数就是此图的基尔霍夫矩阵的任意一个n-1阶主子式的绝对值
基尔霍夫矩阵等于原图的度数矩阵减去邻接矩阵。
0 0