• 9519 偷吃(递推)


    9519 偷吃

    该题有题解

    时间限制:1000MS  内存限制:65535K
    提交次数:251 通过次数:73

    题型: 编程题   语言: G++;GCC

     

    Description

        超牛和lyd最近买了好多零食啊,可是呢,因为龙教很贪吃,经常偷吃他们的东西。
        为了要让龙教吃不到,他们想到了个方法,他们叫pkkj给他们n个箱子,然后他们就把箱子排成一列,把他们买回来的三种零食(包括薯片,果冻还有饼干)放进那里面。
        然后让龙教猜箱子里面的食物,只有两次机会,猜不到就没得吃。
        所以他们想让相邻的箱子里面放的东西不相同(如果箱子数大于1,那么头尾的食物也不能相同)。
        他们想知道到底有多少种放法,因为他们迷上三国杀,懒得想,所以就请聪明的你帮他们算算吧。
    




    输入格式

        输入数据包含多个测试实例,每个测试实例占一行,即pkkj给他们的箱子数n,(0<n<=50)。 



    输出格式

        对于每个测试实例,请输出全部的满足要求的放法,每个实例的输出占一行。



     

    输入样例

    1
    2
    



     

    输出样例

    3
    6



    题解

    用递推式做。
    an表示n个格子放m种东西方法数,
    那么an=m*(m-1)^(n-1) - 首尾相同的个数的情况
    假设首尾相同 那么首尾可以看成一件物品
    那么就是a(n-1)了
    所以递推公式就是an=m*(m-1)^(n-1)-a(n-1)
    其他注意地方,n最大为50,所以要用long long防止溢出

    #include <iostream>
    #include <cstdio>
    using namespace std;
    long long pow(long long di,int zhi)
    {
        long long ans=1;
        for (int i=0;i<zhi;i++)
        ans*=di;
        return ans;
    }
    long long f(int n)
    {
        if (n==1)
        return 3;
        if (n==2)
        return 6;
        return 3*pow(2,n-1)-f(n-1);
    }
    int main()
    {
        int n;
        while (scanf("%d",&n)>0)
        {
            printf("%lld
    ",f(n));
        }
        return 0;
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 相关阅读:
    sci会议和sci期刊区别是什么
    微信小程序保存图片到相册
    详解python3如何调用c语言代码
    微信小程序的跳转navigateTo()和redirectTo()用法和区别
    python+opencv图像变换的两种方法cv2.warpAffine和cv2.warpPerspective
    微信小程序
    微信小程序不同机型的兼容布局解决
    cv2.warpAffine 参数详解
    np.vstack()和np.hstack()
    numpy.linalg.svd函数
  • 原文地址:https://www.cnblogs.com/scaugsh/p/5532537.html
Copyright © 2020-2023  润新知