【hiho一下 第四十一周】骨牌覆盖问题·一
2015-04-20 15:47
549 查看
原题地址:http://hihocoder.com/contest/hiho41/problem/1
题目描述
骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题:
我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢?
举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:
输入
第1行:1个整数N。表示棋盘长度。1≤N≤100, 000, 000
输出
第1行:1个整数,表示覆盖方案数 MOD 19999997
样例输入
样例输出
对于这个题目,采用动态规划的方法来解决。我们只需要考虑当前步骤如何来摆放骨牌,后续的即可转化为子问题。
从上面图中,我们可以清楚的看出,在每一步摆放骨牌的时候,要么是竖着放1块骨牌,要么是横着放2块骨牌,而且显然竖着放1块和横着放两块是不同的两种方案,其构成的是不同的解决方案。如果我们用f(n)来表示长度为n时的解决方案数,那么我们可以将其化为两个子问题:
如果我们第一步放置一个竖着的骨牌,则其后面的n-1个棋盘有f(n-1)种摆法;
如果我们第一步放置两个横着的骨牌,则其后面的n-2个气派有f(n-2)种摆法。
因此我们可以总结出如下公式:f(n)= f(n-1)+ f(n-2)
这就是斐波那契数列了。
代码
个人学习记录,大神勿喷
// sfg1991@163.com
// 2015-04-20
题目描述
骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题:
我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢?
举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:
输入
第1行:1个整数N。表示棋盘长度。1≤N≤100, 000, 000
输出
第1行:1个整数,表示覆盖方案数 MOD 19999997
样例输入
62247088
样例输出
17748018
对于这个题目,采用动态规划的方法来解决。我们只需要考虑当前步骤如何来摆放骨牌,后续的即可转化为子问题。
从上面图中,我们可以清楚的看出,在每一步摆放骨牌的时候,要么是竖着放1块骨牌,要么是横着放2块骨牌,而且显然竖着放1块和横着放两块是不同的两种方案,其构成的是不同的解决方案。如果我们用f(n)来表示长度为n时的解决方案数,那么我们可以将其化为两个子问题:
如果我们第一步放置一个竖着的骨牌,则其后面的n-1个棋盘有f(n-1)种摆法;
如果我们第一步放置两个横着的骨牌,则其后面的n-2个气派有f(n-2)种摆法。
因此我们可以总结出如下公式:f(n)= f(n-1)+ f(n-2)
这就是斐波那契数列了。
代码
#include <stdio.h> int count(int n) { if (n < 1) return 0; else if (n <= 2) return n; int arg1 = 1, arg2 = 2, i; for (i = 3; i < n; ++i) if (i & 1) { arg1 += arg2; arg1 %= 19999997; } else { arg2 += arg1; arg2 %= 19999997; } return (arg1 + arg2) % 19999997; } int main() { int n; while (scanf("%d", &n) != EOF) printf("%d\n", count(n)); return 0; }
个人学习记录,大神勿喷
// sfg1991@163.com
// 2015-04-20
相关文章推荐
- hiho一下·41 骨牌覆盖问题·一(矩阵快速幂·费波拉契)
- hiho一(第四十一周)------骨牌覆盖问题·一
- hihoCoder hiho一下 第四十一周:骨牌覆盖问题
- 【hiho一下 第四十二周】骨牌覆盖问题·二
- hihoCoder 骨牌覆盖问题·一 hiho一下 第四十一周
- 2015编程之美 骨牌覆盖问题·一(矩阵快速幂)
- hihoCoder hiho一下 第四十二周:骨牌覆盖问题·二
- 题目1 : 骨牌覆盖问题·一 (线性递推+矩阵快速幂)
- hihoCoder#1143 : 骨牌覆盖问题·一
- hihoCoder 1143 : 骨牌覆盖问题·一 矩阵快速幂
- hihoCoder #1143 : 骨牌覆盖问题·一
- hiho一下 第五十五周 连通性·四(无向图点双连通分量)
- hiho 1143 骨牌覆盖问题 java
- #1162 : 骨牌覆盖问题·三
- hiho一下·47 拓扑排序·一(判断是否能够Topo排序)
- hihoCoder - hiho一下 第二十七周 - A - 最小生成树二·Kruscal算法
- hiho一下 第二十七周:最小生成树二·Kruscal算法
- hiho一下 第五十六周 高斯消元·一(高斯消元解整数方程组)
- 斐波那契数列 改1 3*N 骨牌覆盖 改1 hiho一下 第四十二周 递归不行 矩阵加速
- hiho 42 骨牌覆盖问题·二