URAL 1513. Lemon Tale(简单的递推)

18 篇文章 0 订阅

写几组数据就会发现规律了啊。。可是我是竖着看的。。。还找了半天啊、、、

不过要用高精度来写,水题啊,就当熟悉一下java了啊。

num[i] = 2*num[i-1]-num[i-2-k]。

1513. Lemon Tale

Time limit: 1.0 second
Memory limit: 64 MB

Background

For each programmer a point comes when the last contest is lost, and it is time to retire. Even Three Programmers themselves could not escape the common lot. But the Programmers also wanted to keep a good memory about themselves. For this noble purpose they created problems and organized extremely popular programming contests from time to time. Of course, this work was not well paid, but for true programmers a glory was more important than money.
However it is only the first half of a job to think out a brilliant problem. The second one is to create a politically correct statement for it.

Problem

The matter is the statement of some problem for the upcoming contest was written by the Third Programmer, who knew nothing about political correctness. He just wrote a story about citrus plants growing. As a result a word "lemon" was mentioned  N times in the statement.
Besides, the problem is to be looked through by famous censor Alexander K. right before the contest. And it is a known fact, that lemons remind him of oranges he hates furiously. It worries the First and the Second Programmers greatly - they know exactly, that if a word "lemon" occurs more than  Ktimes successively, the problem will be immediately disqualified from the contest.
That is why the First and the Second Programmers connived secretly to login to the server at the eve of the contest and replace some "lemons" with much more politically correct "bananas" so that the problem could not be disqualified. How many ways are there to do it?

Input

The only line contains the integer numbers  N (1 ≤  N ≤ 10000) and  K (0 ≤  K ≤  N).

Output

You should output the desired number of ways.

Sample

input output
5 2
24

Hint

Let us denote a word "lemon" by a letter "L" and a word "banana" by a letter "B". So in the sample the initial sequence of words "LLLLL" might be transformed into the following politically correct sequences: "LLBLL", "LLBLB", "LLBBL", "LLBBB", "LBLLB", "LBLBL", "LBLBB", "LBBLL", "LBBLB", "LBBBL", "LBBBB", "BLLBL", "BLLBB", "BLBLL", "BLBLB", "BLBBL", "BLBBB", "BBLLB", "BBLBL", "BBLBB", "BBBLL", "BBBLB", "BBBBL" and "BBBBB".
import java.math.BigInteger;
import java.util.Scanner;



public class Main {



	public static void main(String[] args) {

		Scanner cin = new Scanner(System.in);
		int n, k;
		BigInteger num[] = new BigInteger [100005];
		while(cin.hasNext())
		{
			n = cin.nextInt();
			k = cin.nextInt();
			BigInteger ans;
			BigInteger p = BigInteger.valueOf(2);
			ans = p.pow(n);
			if(k == 0)
			{
				System.out.println(1);
				continue;
			}
			if(n == k)
			{
				System.out.println(ans);
				continue;
			}
			num[0] = BigInteger.valueOf(1);
			for(int i = 1; i <= k+1; i++) 
			{
				num[i] = p.pow(i-1);
			}
			for(int i = k+2; i <= n; i++)
			{
				num[i] = num[i-1].multiply(BigInteger.valueOf(2));
				num[i] = num[i].subtract(num[i-2-k]);
			}
			ans = BigInteger.valueOf(0);
			for(int i = n; i >= (n-k); i--)
			{
				ans = ans.add(num[i]);
			}
			System.out.println(ans);
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值