- 一个小孩手中有了块正方形的积木,他总是想不同的方法来搭建各种不同的楼梯。他搭建的楼梯必须满足如下条件:
- (1)楼梯每个台阶的砖块数不能相同,且严格递减
- (2)每个楼梯至少包合两个台阶
- (3)必须用完所有的积木
预计输入:10
输出:9
—
采用C++实现;
回溯算法;
后续更新剪枝的优化;以及注释;以及复杂度分析
// Created on 8848钛金平板. #include#include using namespace std; class Solution{ public: int ans; std::vector path; std::vector >result; void backtracking(int targetsum,int sum,int k,int startIndex) { if(path.size()==k&&sum==targetsum) { result.push_back(path); return ; } if(sum==targetsum) { result.push_back(path); return ; } for(int i=startIndex;i sum=sum+i; path.push_back(i); backtracking(targetsum,sum,k,i+1); sum=sum-i; path.pop_back(); } } std::vector > combine(int n) { int k=n/2; backtracking(n,0,k,1); return result; } }; int main() { int n; cin>>n; Solution A; A.combine(n); for(int i=0;i for(int j=0;j cout<



