Power oj 3132:恰巧K步的方案数

一道走楼梯的改编题,题目大意就是从1走到N,在位置i时,可以走的步数是1、2、… 一直到i,求走到N是恰好是k步的方案数是多少?
这道题要注意两个点
一:本题是多组输入,求一组的时间复杂度是O(n*k),大概就是1e7,几十组样例就T了。
这种情况要往预处理方向想,把dp[N][k]先全求出来,之后就可以读入一个输出一个。
二:本题的状态转移方程是
dp[i][j]=dp[i-1][j]+dp[i-1][j-1];//i%2==0 dp[i][j]=dp[i-1][j]-dp[(i-1)/2][j-1]+dp[i-1][j-1]//i%2==1
当i%2==1时,状态转移公式里有减号,如果不处理的话会出现负数。
AC代码如下
#include<bits/stdc++.h> using namespace std; #define int long long const int mod=1e9+7; const int N=2e5+10; int n,m,k; int dp[10010][1010]; void init(int n,int k) { dp[1][0]=1; for(int i=2;i<=n;i++) for(int j=1;j<=k&&j<=i-1;j++) { if(i%2==0) dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%mod; else dp[i][j]=(((dp[i-1][j]-dp[(i-1)/2][j-1])%mod+mod)%mod+dp[i-1][j-1])%mod; } } signed main() { init(10000,1000); while(scanf("%lld%lld",&n,&k)!=EOF) { if(pow(2,k)<n) printf("0\n"); else printf("%lld\n",dp[n][k]); } return 0; }
2022-08-02
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】