FZU Problem 2156 Climb Stairs DP
2014-03-24 18:08
344 查看
http://acm.fzu.edu.cn/problem.php?pid=2156
题目大意:
爬楼梯,要爬到n这个位置,每次可以走x也可以走y,然后一定要经过A和B两点,求最终到达n的方案数。
思路:
昨天FZU月赛题,今天小伙伴问我的- -|||,晚上回来敲完,发现有校!!选!!!课!!!!!哭
因为一定要到达A和B,那么直接分成0~A,A~B,B~N递推就好了。
注意每次不要越界,比如0~A,那么不要超过A。因为你可能超过A,没有到A,对后面的累加有影响。(结果偏大)
详见代码。
题目大意:
爬楼梯,要爬到n这个位置,每次可以走x也可以走y,然后一定要经过A和B两点,求最终到达n的方案数。
思路:
昨天FZU月赛题,今天小伙伴问我的- -|||,晚上回来敲完,发现有校!!选!!!课!!!!!哭
因为一定要到达A和B,那么直接分成0~A,A~B,B~N递推就好了。
注意每次不要越界,比如0~A,那么不要超过A。因为你可能超过A,没有到A,对后面的累加有影响。(结果偏大)
详见代码。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN=10000+10; const int mod=1000000007; __int64 f[MAXN]; int n,x,y,a,b; void solve(int L,int R) { for(int i=L;i<=R;i++) { if(i+x<=R) f[i+x]=(f[i]+f[i+x])%mod; if(i+y<=R) f[i+y]=(f[i]+f[i+y])%mod; } } int main() { while(~scanf("%d%d%d%d%d",&n,&x,&y,&a,&b)) { memset(f,0,sizeof(f)); if(a>b) swap(a,b); f[0]=1; solve(0,a); solve(a,b); solve(b,n); printf("%I64d\n",f %mod); } return 0; }
相关文章推荐
- FZU Problem 2156 Climb Stairs DP
- FZU 2156 Climb Stairs dp
- fzu Problem 2113 Jason的特殊爱好 (数位dp)
- Simple String Problem FZU - 2218 状压dp
- FZU-2218 Simple String Problem(状压DP)
- FZU 2218 Simple String Problem(状压DP)
- FZU2218 Simple String Problem(状压DP)
- FZU 2218 Simple String Problem(状态压缩DP)
- http://acm.fzu.edu.cn/problem.php?pid=2113 数位DP
- FZU 2218 Simple String Problem(状压DP)
- FZU-2218-Simple String Problem【状态压缩dp】
- FZU 2218 Simple String Problem (状压dp)
- FZU 1432 Problem 1432 Coin Changing(多重背包变形DP)
- FZU 2218 Simple String Problem (状压DP解决集合不相同元素问题)
- Fzu Problem 2253 Salty Fish(dp)
- FZUProblem 2129 子序列个数(dp)
- FZU2218 Simple String Problem--状压dp
- HUNAN 11569 Just Another Knapsack Problem(AC自动机+dp)
- fzu2157(树形dp)
- 【bzoj2302】【HAOI2011】【problem c】【dp】