我写了一段代码,但是输出不对,我实在不知道怎么修改,有哪位大佬提点一下,谢谢!
题目内容是这样的:
有n
个边长为1的正立方体,在一个宽为1的轨道上堆塔,但塔本身不能分离。例如下图所:n=1
时只有一种方案;n=2
时有2种方案(中图);
n=1,2,3
的情形
堆塔的规则为底层必须有支撑,右图的两种堆法是不合法的。
输入描述
一个整数n
(n≤40
)。
输出描述
第一行一个整数,表示总共有多少种不同的方案。
接下来k
行,堆成k
层(1≤k≤n
)的方案数各是多少(具体格式参见样例)。
样例
输入 复制
4
输出 复制
8
Height=1 Kind=1
Height=2 Kind=4
Height=3 Kind=2
Height=4 Kind=1
我的代码:
#include <bits/stdc++.h>
using namespace std;
int countTowerSolutions(int n) {
std::vector<int> dp(n+1,0);
dp[0] = 1;
for (int i=1;i<=n;i++) {
for (int j=1;j<=i;j++) {
dp[i]+=dp[i-j];
}
}
return dp[n];
}
int main() {
int n;
std::cin>>n;
int totalSolutions=countTowerSolutions(n);
std::cout << totalSolutions<<'\n';
for (int k=1;k<=n;k++){
int kLayerSolutions=countTowerSolutions(k);
std::cout << "Height="<< k << "Kind=" << kLayerSolutions<<'\n' ;
}
return 0;
}
- 此代码的输入:
4
输出:
8
Height=1Kind=1
Height=2Kind=2
Height=3Kind=4
Height=4Kind=8