TheBrickTowerEasyDivOne

作者:徐懿

关键词:数学

题目简述

现在有个高度为红色砖块,和个高度为的蓝色砖块。你需要用其中的一部分砖块造一个塔。每个砖块只能放在地上,或者一个不同颜色的砖块上。一个砖块不能放在同样颜色的砖块上。地上和每个砖块上只能有至多一个砖块,每个砖块至多在一个砖块上,或在地上。一个塔至少要有一个砖块。一个塔的高度为所有组成它的砖块的高度和。两个塔被认为是相同的当且仅当两个塔的高度相同。

给定,球有多少种不同的塔。

题目中给定的数均为之间的整数。

解法

经过观察可以发现,一个塔中蓝色砖块的数量,与其中红色砖块的数量,满足

显然,塔的高度有

这三种。

时,计算会重复,反之亦然。

具体细节参见代码。

#include<bits/stdc++.h>

class TheBrickTowerEasyDivOne 
{
    public:
        int find(int rc, int rh, int bc, int bh) 
        {
            if(rc==bc)
            {
                if(rh==bh)return rc*2;//去除二式等于三式的情况
                else return rc*3;
            }
            else//a!=b的情况会多出一种
            {
                if(rh==bh)return std::min(rc,bc)*2+1;//去除二式等于三式的情况
                else return std::min(rc,bc)*3+1;
            }
        }
};

results matching ""

    No results matching ""