bLue的旅行

Problem Description

一天,刚打完 CF 的 bLue 决定来一场说走就走的旅行,于是他拿出了地图开始制定行程。

在地图上,bLue 和目的地之间可以用一条直线来表示,他自己在坐标为 0 的位置,而目的地在坐标为 n 的位置。

bLue 计划花费 d 天到达目的地,旅途中,他每天只能选择前进 1, 2, 3 或 4 个单位距离,而不能向回走。他想知道有多少种方案能使他恰好花费 d 天到达目的地。

例如:目的地的坐标为 4,计划天数为 3,则 bLue 有 "1, 2, 4", "1, 3, 4", "2, 3, 4" 三种方案。

Input

输入数据有多组(数据组数不超过 10000),到 EOF 结束。

每组数据输入一行,包含 2 个整数 n, d (0 <= n <= 20, 0 <= d < 10^6),分别代表目的地的位置和 bLue 花费的天数。

Output

对于每组数据,输出一行,代表方案数。

Example Input
2 1
2 2
4 2
4 3
5 3
Example Output
1
1
3
3
6
Hint
很简单的动态规划,自行百度,不过要注意他的计划天数,因为blue只能往前走,也就是说当计划天
数大于坐标点时,blue会提前到达,所以没有方案.这点如果不注意会超时.
源代码:
#include<stdio.h>
#include<string.h>
int day;//计划天数
int a[4]={1,2,3,4};//前进距离
int biao;//目的地坐标
int sum;//方法总和
void go(int s,int g)
{
	if(g>day||s>biao) return ;
	else if(day==g&&biao==s)
	{ 
		sum++;
		return ;
	} 
	else
	{
		for(int i=0;i<4;i++)
		{
			g++;
			go(s+a[i],g);
			g--;
		}
	}
}
int main()
{
	int i,j;
	while(~scanf("%d%d",&biao,&day))
	{
		if(day>biao)
		{
			printf("0\n");
			continue;
		}
		sum=0;
		go(0,0);
		printf("%d\n",sum);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值