首页 > 其他 > 详细

FZU Problem 2156 Climb Stairs DP

时间:2014-03-25 11:57:08      阅读:531      评论:0      收藏:0      [点我收藏+]

http://acm.fzu.edu.cn/problem.php?pid=2156

题目大意:

爬楼梯,要爬到n这个位置,每次可以走x也可以走y,然后一定要经过A和B两点,求最终到达n的方案数。

思路:

昨天FZU月赛题,今天小伙伴问我的- -|||,晚上回来敲完,发现有校!!选!!!课!!!!!哭

因为一定要到达A和B,那么直接分成0~A,A~B,B~N递推就好了。

注意每次要清零。比如到达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 k,int L,int R)
{
		memset(f,0,sizeof(f));
		f[L]=k;
		for(int i=L;i<=R;i++)
		{
			if(i+x<MAXN)
				f[i+x]=(f[i]+f[i+x])%mod;
			if(i+y<MAXN)
				f[i+y]=(f[i]+f[i+y])%mod;
		}
		
}
int main()
{

	while(~scanf("%d%d%d%d%d",&n,&x,&y,&a,&b))
	{
		if(a>b) swap(a,b);
		solve(1,0,a);
		solve(f[a],a,b);
		solve(f[b],b,n);
		printf("%I64d\n",f[n]%mod);
	}
	return 0;
}



FZU Problem 2156 Climb Stairs DP,布布扣,bubuko.com

FZU Problem 2156 Climb Stairs DP

原文:http://blog.csdn.net/murmured/article/details/21976867

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!