描述
一个好奇的小孩子有N个小砖块(5<=N<=500).用这些砖块,他搭建了一些不同的楼梯。楼梯由严格递减的梯子序列组成,楼梯不允许有相同的两梯。每个楼梯至少有2格,每格至少有一个砖块。图中给了N=11和N=5时的例子
你的任务是写一个程序,从文件中读入N,输出唯一的数Q--能用N块砖搭建的不同梯子的总数。
[编辑]输入
N
[编辑]输出
Q
[编辑]输入输出样例
input:
212
output:
995645335
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<cstdlib> #include<queue> #include<vector> #include<set> #include<bitset> using namespace std; int n; long long dp[510][510]; int main() { while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i<j) dp[i][j]=dp[i][i]; else if(i==j) dp[i][j]=dp[i][j-1]+1; else dp[i][j]=dp[i][j-1]+dp[i-j][j-1]; printf("%I64d\n",dp[n][n]-1); } return 0; }
时间: 2024-10-05 07:03:47