BZOJ 1002: [FJOI2007]轮状病毒

好久好久好久好久没写博客了,由于csdn改版了,一直不大喜欢,所以也就不大乐意上博客了。。其实说起来也没什么题好写的,有时候还是会做到好题的,由于已经忘记了csdn忘记了我有博客,于是就没写了。but 现在还是继续开始吧,有什么感觉不错的题还是可以mark下的。


接下来是题意,中文题就是好,直接上题目。。

BZOJ 1002: [FJOI2007]轮状病毒_第1张图片 给定n(N<=100),编程计算有多少个不同的n轮状病毒。


思路:

题目就是求最小生成树的种数,中心的点必须要和周围的一圈点连通,可以先不要管环,先考虑链的情况

dp[ i ][ 0 ]表示第i个点还没和中心点连通,并且前i-1个点和中心点或者第i个点是连通的

dp[ i ][ 1 ]表示前i个点全部都已经和中心点连通了

很容易可以推出状态转移方程 :

dp[ i ][ 0 ] = dp[ i-1 ][ 0 ] + dp[ i-1 ][ 1 ]

dp[ i ][ 1 ] = dp[ i-1 ][ 0 ] + dp[ i-1 ][ 1 ]*2

那么对于n轮状病毒,可以枚举第一个点和多少个周围的点连通,其余的点就是一条链的情况了。


BZOJ 1002: [FJOI2007]轮状病毒_第2张图片

ps: 高精度是必须的


code:


你可能感兴趣的:(BZOJ 1002: [FJOI2007]轮状病毒)