B - The Staircases (dp)
One curious child has a set of N little bricks. From these bricks he builds different staircases. Staircase consists of steps of different sizes in a strictly descending order. It is not allowed for staircase to have steps equal sizes. Every staircase consists of at least two steps and each step contains at least one brick. Picture gives examples of staircase for N=11 and N=5:
Your task is to write a program that reads from input numbers N and writes to output numbers Q - amount of different staircases that can be built from exactly N bricks.
Input
Numbers N, one on each line. You can assume N is between 3 and 500, both inclusive. A number 0 indicates the end of input.
<b< dd="">Output
Numbers Q, one on each line.
<b< dd="">Sample Input
3
5
0
状态转移方程:dp[i][j]=dp[i-j][j-1]+dp[i][j-1];
注意开数组不要太大,可能会T
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<map> #include<set> #include<vector> #include<cmath> const int maxn=1e5+5; typedef long long ll; using namespace std; ll dp[1500][1500]; int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==0) break; memset(dp,0,sizeof(dp)); for(int i=0;i<=n;i++) dp[0][i]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i>=j) dp[i][j]=dp[i-j][j-1]+dp[i][j-1]; else dp[i][j]=dp[i][j-1]; printf("%lld\n",dp[n][n]-1); } return 0; }
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步