栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

回溯法:N块正方形的积木,搭不同楼梯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

回溯法:N块正方形的积木,搭不同楼梯

通过回溯实现有剪枝:题目

  • 一个小孩手中有了块正方形的积木,他总是想不同的方法来搭建各种不同的楼梯。他搭建的楼梯必须满足如下条件:

要求:
1.楼梯每个台阶的砖块数不能相同,且严格递
2.每个楼梯至少包合两个台阶
3.必须用完所有的积

预计输入:10
输出:9
预计输入:5
输出:2

采用C++实现;
回溯算法;
有错求大佬指点

#include 
#include 
using namespace std;
class Solution
{
public:
    int ans = 0;
    void backtracking(int targetsum, int sum, int k, int startIndex)
    {
        if (k < 0 || sum > targetsum) //到达最底层,和是否大于总块数
            return;
        if (sum == targetsum) //判断是否成立
        {
            ans++;
            return;
        }
        for (int i = startIndex; i < targetsum; i++)
        {
            sum = sum + i; //记录当前方块总和
            if (sum > targetsum)
                return;
            backtracking(targetsum, sum, k - 1, i + 1);
            sum = sum - i; //回弹
        }
    }
    void combine(int n)
    {
        int k = (n+1) / 2; //最大深度
        backtracking(n, 0, k, 1);
    }
};
int main()
{
    int n;
    cin >> n;
    Solution A;
    A.combine(n);
    cout << A.ans;
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号