<递推>hdoj 2569 彼岸

一开始想运用高中黄老师教的排列组合知识来做哈哈哈,忽然很想念数学老师。
他真是一位非常优秀的老师啊,当时不自知。哦最后当然wa了,递推式了解一下?

题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2569

题目大意:
悬崖,n,每三个格子的颜色不能完全不相同,否则就掉下悬崖啦。
n个格子的悬崖,有多少种放颜色的可能呢?

解题思路:
珠子,我们来抽象一下,取里边某三个珠子,后边递推就行。

//第i块,第i-1块,第i-2块
如果第一块和第二块颜色相同,
那么第三块的颜色的数目等于第一块颜色的数目乘以三

如果第一块和第二块颜色不同,
那么第三块的颜色的数目等于第二块的颜色的数目减去第一块颜色的数目,得到的差乘以2
(Q1:为什么乘以2?)
A:因为第三块的颜色不是和第一块相同就是和第二块相同,有两种可能性
(Q2:为什么要拿第二块颜色的数目减去第一块颜色的数目?)
A:因为第二块颜色的数目本身,包含了和第一块颜色相同的第二块颜色的数目,
需要把这部分剪掉,而颜色相同时,数目当然也相等啦

综上,第三块颜色数目的总可能性=step[i]=step[i-2]3+(step[i-1]-step[i-2])2

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t,n;            //(n<40)
    cin>>t;
    
    int step[50]={0,3,9,21};
    for(int i=3;i<50;i++)
        step[i]=step[i-1]*2+step[i-2];
    
    while(t--)
    {
        cin>>n;
        cout<<step[n]<<endl; 
    }
    return 0;
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容