• [CF478D] Red-Green Towers


    Description

    有红色、绿色两种砖块,分别有 (r,g) 块,要用他们搭建高度最大的金字塔(第 (i) 层恰好有 (i) 块砖),每一层的砖的颜色必须相同,求有多少种方案。

    Solution

    考虑到层数是 (sqrt n) 量级的,因此我们可以简单地 DP,不妨设计算出的层数为 (h),那么这样需要的总砖块数是确定的,不妨记为 (tot)

    (f[i][j]) 表示制作了 (1-i) 层,用了 (j) 块红砖,有多少种方案。

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    const int N = 200005;
    const int mod = 1e+9+7;
    
    int f[N],n,r,g;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin>>r>>g;
    
        for(int i=1;i<=r+g+1;i++)
        {
            int t=i*(i+1)/2;
            if(t>r+g) 
            {
                n=i-1;
                break;
            }
        }
    
        f[0]=1;
    
        for(int i=1;i<=n;i++)
        {
            for(int j=r;j>=i;j--)
            {
                f[j]=(f[j]+f[j-i])%mod;
            }
        }
    
        int max_r=r;
        int min_r=n*(n+1)/2-g;
    
        int ans=0;
        for(int i=max(0ll,min_r);i<=max_r;i++)
        {
            ans=(ans+f[i])%mod;
        }
    
        cout<<ans<<endl;
    }
    
  • 相关阅读:
    HDU 2066 一个人的旅行 最短路问题
    HDU 2112 HDU Today 最短路
    HDU 2521 反素数 模拟题
    mac 安装 office
    selenium用法 (python)
    selenium遇到不可编辑input和隐藏input如何赋值
    mac 下bash命令
    ssh 自动登录
    linux常用命令
    json字符串调整
  • 原文地址:https://www.cnblogs.com/mollnn/p/14120552.html
Copyright © 2020-2023  润新知