首页 > 其他 > 详细

Codeforces #594 div 1 A/div 2 C - Ivan the Fool and the Probability Theory

时间:2019-11-06 20:50:48      阅读:65      评论:0      收藏:0      [点我收藏+]

题目链接:https://codeforces.com/contest/1239/problem/A

题意:有n行m列的黑白格子,要求每个格子相邻最多只有一个和它颜色相同的格子,问有多少种可能。

做法:递推。首先我们发现,当两个相邻格子颜色相同时,它们所在的行(or列)就确定了,同时所有格子也就确定了。当没有两个相邻格子颜色相同时,只有两种情况。当只有一行(or 一列)格子的时候,每个格子的颜色由它前面两个格子决定,可以得出只有一行(or 一列)格子时候的递推式:F[n]=F[n-1]+F[n-2],就是斐波那契数列,因为有两种颜色,所以递推式是斐波那契数列*2,结合前面两个相邻格子颜色相同能确定所有格子,我们得到F[n]+F[m],但是我们对当没有两个相邻格子颜色相同时的情况重复计算了两次,所以得到结果F[n]+F[m]-2。

参考代码:

#include <iostream>

using namespace std;
const int MOD = 1000000007;
long long F[100005];

int main()
{
    int n, m;
    cin >> n >> m;
    F[1] = 2, F[2] = 4;
    for (int i = 3; i <= max(n, m); ++i)
        F[i] = (F[i - 1] + F[i - 2]) % MOD;
    cout << (F[n] + F[m] - 2) % MOD << endl;
    return 0;
}

Codeforces #594 div 1 A/div 2 C - Ivan the Fool and the Probability Theory

原文:https://www.cnblogs.com/mapleaves/p/11808438.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!