[BZOJ1002](FJOI 2007) 轮状病毒
【题目描述】
给定n(N<=100),编程计算有多少个不同的n轮状病毒。

【输入格式】
第一行有1个正整数n。
【输出格式】
将编程计算出的不同的n轮状病毒数输出
【样例输入】
3
【样例输出】
16
【题目来源】
(福建省选赛2007)
【分析】
从“各原子有唯一的信息通道”不难看出,每种轮状病毒对应着轮状基的一棵生成树。一般图的生成树计数可以用Matrix-Tree 定理求解,但这里的图比较特殊,用Matrix-Tree未免有些小题大做, 我们可以用组合递推的方法求解。
先设$f(n)$为n轮状基上删去一条弧得到的“缺口轮”上的生成树个数,再设$S(n) = \sum \limits_{i = 1}^n {f(i)}$. 于是就有:
$$\begin{array}{F} f(0) = f(1) = 1\\ f(n) = 2f(n-1) + \sum_{i=0}^{n-2} f(i) = f(n-1) + S(n-1) + 1 \end{array}$$
$$ans(n) = f(n) + 2\sum_{i = 1}^{n-1}f(i) = S(n) + S(n-1)$$
考虑到n最大为100,答案会超过long long的范围,这里的状态值应用高精度类存储。

2 Problem: 1002
3 User: 935671154
4 Language: C++
5 Result: Accepted
6 Time:44 ms
7 Memory:2068 kb
8 ****************************************************************/
9
//Author : Asm.Def
#include <iostream>
#include <cctype>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
inline void getd(int &x){
char c = getchar();
bool minus = ;
while(!isdigit(c) && c != '-')c = getchar();
if(c == '-')minus = , c = getchar();
x = c - '';
while(isdigit(c = getchar()))x = x * + c - '';
if(minus)x = -x;
}
/*======================================================*/
const int maxn = ;
struct BigN{
#define base 10000
#define maxl 1000
int A[maxl], len;
BigN(){len = , A[] = ;}
BigN &operator = (const BigN &x){
len = ;
while(len < x.len){A[len] = x.A[len]; ++len;}
return *this;
}
BigN &operator = (int k){len = ;A[] = k; return *this;}
BigN &operator += (const BigN &x){
int i, mor = ;
for(i = ;i < x.len || mor;++i){
if(i < len)mor += A[i];
if(i < x.len)mor += x.A[i];
A[i] = mor % base;
mor /= base;
}
if(i > len)len = i;
return *this;
}
}f[maxn], S[maxn];
inline void work(int k){
int i;
if(!k){printf("0\n");return;}
f[] = , f[] = , S[] = ;
if(k == ){printf("1\n");return;}
for(i = ;i <= k;++i){
f[i] = ; f[i] += f[i-]; f[i] += S[i-];
S[i] = S[i-]; S[i] += f[i];
}
S[k] += S[k-];
i = S[k].len - ;
printf("%d", S[k].A[i]);
while(i)
printf("%04d", S[k].A[--i]);
putchar('\n');
}
int main(){
#if defined DEBUG
freopen("test", "r", stdin);
#endif
int k;
getd(k);
work(k);
#if defined DEBUG
cout << endl << (double)clock()/CLOCKS_PER_SEC << endl;
#endif
return ;
}
高精度 + 递推
[BZOJ1002](FJOI 2007) 轮状病毒的更多相关文章
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
题目大意: 思路:基尔霍夫矩阵求生成树个数,不会. 可是能够暴力打表.(我才不会说我调试force调试了20分钟... CODE(force.cc): #include <cstdio> ...
- 【BZOJ1002】[ZJOI2006]轮状病毒
[BZOJ1002]轮状病毒 题面 bzoj 题解 统计个数显然直接矩阵树定理,找规律截这里 打标如下: #include <iostream> #include <cstdlib& ...
- 【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度
Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...
- 【bzoj1002】[FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4381 Solved: 2393[Submit][Statu ...
- 【bzoj1002】[FJOI2007]轮状病毒 矩阵树定理+高精度
题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...
- BZOJ 1002 [ FJOI 2007 ]
-------------------------萌萌哒分割线------------------------- 题目很容易看懂,数据范围也不大.当然可以卡过暴力的人了. 在n=1时很明显是一种,如下 ...
- bzoj1002:[FJOI2007]轮状病毒
思路:一道很裸的生成树计数问题,然而要高精度,而且听说直接行列式求值会被卡精度,所以可以模拟行列式求值的过程得到递推公式:f[i]=3*f[i-1]-f[i-2]+2,证明详见vfk博客: http: ...
- 【bzoj1002】 [FJOI2007]轮状病毒DP
递推+环状特殊处理+高精度 #include<algorithm> #include<iostream> #include<cstdlib> #include& ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
随机推荐
- HTTP响应码摘自apach官网
HTTP状态列表 响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行. 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接 ...
- php中的__call()函数重载
<?php #调用类中没有的方法时, 会自动调用__call方法重载 #第一个参数是调用时的方法名, 第二个参数为参数组成的数组 class Cat{ public function Hello ...
- python中的argparse模块
argparse干什么用的? 答:参数设置,比如python demo.py -h 诸如此类的. 开始学习这个模块: parser = argparse.ArgumentParser() #使用这个模 ...
- Linux 入门记录:五、vi、vim 编辑器
一.vi.vim编辑器 vi 是一个命令行界面下的文本编辑工具,最早在 1976 年由 Bill Joy 开发.当时名字叫做 ex.vi 支持绝大多数操作系统(最早在类 Unix 操作系统的 BSD上 ...
- ThinkPHP3.1.3 整合 UEditor百度编辑器 图片上传
第一步.前端模板实例化百度编辑器 <js file='__ROOT__/Data/UEditor/ueditor.config.js' /> <js file='__ROOT__/D ...
- CNN中千奇百怪的卷积方式大汇总
1.原始版本 最早的卷积方式还没有任何骚套路,那就也没什么好说的了. 见下图,原始的conv操作可以看做一个2D版本的无隐层神经网络. 附上一个卷积详细流程: [TensorFlow]tf.nn.co ...
- xcode 配置系统环境变量 Preporocessing 预编译宏的另一种写法, 系统的DEBUG 由来
在某些项目中看到一些环境变量类似宏的东西 比如叫ENVIRONMENT, 但发现还找不到具体这个宏是什么值, 那是因为他实在Preprocessing里配置了这个宏的值, 他能配置debug/rele ...
- vue点击切换颜色限制个数(用了mui框架)
vue点击切换颜色 只能点击一个 <!doctype html> <head> <meta charset="UTF-8"> <title ...
- docker数据管理--数据卷的备份
/* 先在宿主机创建一个备份的文 件夹, 然后将其以另外一个名字的目录挂载到容器里, 此时不管容器里,或宿主机里做什么操作, 数据都会及时更新,并得到备份. */ [root@localhost ~] ...
- JQuery一个对象绑定多个事件
jQuery("#id").click(func1).mouseover(func2)//方法连写,func为方法的名字 jQuery("#id").click ...