zoukankan      html  css  js  c++  java
  • 排队问题

    【题目描述】

    有N个学生去食堂,可教官规定:必须2人或3人组成一组,求有多少种不同分组的方法。

    【输入描述】

    一个数,N。

    【输出描述】

    一个数,即答案。

    【样例输入】

    6

    【样例输出】

    2

    【数据范围及提示】

    N <= 150。

    递推DP:

    源代码:
    
    #include<cstdio>
    int n;
    long long f[151];
    int main()
    {
        scanf("%d",&n);
        f[2]=f[3]=1;
        for (int a=4;a<=n;a++)
          f[a]=f[a-2]+f[a-3];
        printf("%lld",f[n]);
        return 0;
    }

    记忆化搜索DP:

    源代码:
    
    #include<cstdio>
    int n;
    long long ans(0),f[151]={0}; //注意这坑人的Long Long。
    void Solve(int t)
    {
        if (f[t]) //记忆化。
        {
            ans+=f[t];
            return;
        }
        if (!t) //成立。
        {
            ans++;
            return;
        }
        long long num=ans;
        if (t>=3)
          Solve(t-3);
        if (t>=2)
          Solve(t-2);
        f[t]=ans-num; //妙处之所在。改变即为此情况的答案。
    }
    int main()
    {
        scanf("%d",&n);
        Solve(n);
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    04.
    24
    39
    46
    72.
    21.
    logout: not found”
    Username is not in the sudoers file. This incident will be reported
    激活函数
    排序算法
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5573388.html
Copyright © 2011-2022 走看看