bzoj1002[FJOI2007]轮状病毒
2014-06-01 23:21
253 查看
![](http://www.lydsy.com/JudgeOnline/images/1002/1.jpg)
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
Input
第一行有1个正整数n。Output
将编程计算出的不同的n轮状病毒数输出Sample Input
3Sample Output
16神dp。如果没看题解真心想不出来
#include<stdio.h> #include<string.h> #define MAXD 110 int N; struct BigInteger { char a[MAXD]; const static int D = 100; void init(int n) { int i; for(i = 0; i < D; i ++) { a[i] = n % 10; n /= 10; } } BigInteger add(BigInteger &b) { int i, s, c; BigInteger ans; c = 0; for(i = 0; i < D; i ++) { s = a[i] + b.a[i] + c; ans.a[i] = s % 10; c = s / 10; } return ans; } BigInteger minus(BigInteger &b) { int i, s, c; BigInteger ans; c = 0; for(i = 0; i < D; i ++) { s = a[i] + c; if(s >= b.a[i]) { ans.a[i] = s - b.a[i]; c = 0; } else { c = -1; ans.a[i] = s + 10 - b.a[i]; } } return ans; } void print() { int i; for(i = D - 1; i > 0 && a[i] == 0; i --); for(; i >= 0; i --) printf("%d", a[i]); } }f[MAXD], h[MAXD], g[MAXD]; void init() { f[1].init(0), g[1].init(1), h[1].init(1); f[2].init(3), g[2].init(2), h[2].init(3); } void solve() { int i; for(i = 3; i <= N; i ++) { f[i] = f[i - 1].add(f[i - 1]).add(h[i - 1]).minus(h[i - 2]); g[i] = f[i - 1].add(g[i - 1]).add(h[i - 1]); h[i] = f[i - 1].add(h[i - 1]).add(h[i - 1]).minus(h[i - 2]); } f .add(g ).print(); printf("\n"); } int main() { while(scanf("%d", &N) == 1) { init(); solve(); } return 0; }
相关文章推荐
- [bzoj1002] [FJOI2007]轮状病毒
- 【FJOI2007】【BZOJ1002】轮状病毒
- BZOJ 1002 [FJOI2007] 轮状病毒
- BZOJ 1002: [FJOI2007]轮状病毒
- [bzoj] 1002: [FJOI2007]轮状病毒
- 【bzoj1002】【FJOI2007】【轮状病毒】
- BZOJ1002: [FJOI2007]轮状病毒
- Bzoj1002 [FJOI2007]轮状病毒
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
- BZOJ 1002: [FJOI2007]轮状病毒
- BZOJ1002 [FJOI2007]轮状病毒
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
- 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
- BZOJ1002 [FJOI2007]轮状病毒
- 【FJOI2007】bzoj1002 轮状病毒
- 【bzoj 1002】[FJOI2007]轮状病毒
- [BZOJ1002](FJOI 2007) 轮状病毒
- AC日记——[FJOI2007]轮状病毒 bzoj 1002
- bzoj1002[FJOI2007]轮状病毒
- bzoj1002[FJOI2007]轮状病毒 递推+高精度