第十一届蓝桥杯国赛-第10题-蓝跳跳

前言

这次比赛的题目感觉整体上不是太难,大部分题目理解起来比较容易,但是数据规模卡的比较紧。这段时间学校的课程比较紧张,三天两头有报告要写,没什么时间练习算法,发挥的也不是很好(其实就是菜了😂)
然后就是这次比赛的最后1题,叫蓝跳跳,一道难度还是比较简单的动态规划+循环数组的题。

题目

蓝跳跳机器人从起点不回头地跳到终点,距离L。

  1. 一次最多可以跳k步。
  2. 连续地两次跳跃不能都大于等于p步,不然机器人会因为不稳定摔倒。

问:有多少种从起点跳到终点的方式?结果mod上20201114
(完整的题目记不住了,等官方出来后补上😂)

数据规模

0<p<k<100000(这个记不清了,应该差不多)
0<L<1018

样例输入1

3 2 5

样例输出1

9

样例输入2

5 3 10

样例输出2

397

代码

在这里插入图片描述

import java.util.Scanner;

public class Main {
	static int len;
	static int[][] arr;
	static int k;
	static int p;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		k = sc.nextInt();
		p = sc.nextInt();
		long L = sc.nextLong();
		sc.close();
		// 创建一个双层的循环数组,0层存没跳到p几次的方式个数,1层存跳至少p次的方式个数
		len = k + 1;
		arr = new int[len][2];
		int i;
		arr[0][1] = arr[0][0] = 1;
		for (i = 1; L-- > 0; i = (i + 1) % len) {
			int sum = 0;
			for (int j = 1; j < p; j++) {
				// 跳p次以内累加的是之前跳至少p次的方式个数。
				sum = (sum + arr[(len + i - j) % len][1]) % 20201114;
			}
			arr[i][0] = sum;
			for (int j = p; j <= k; j++) {
				// 跳至少p次时累加的是之前跳p次以内的方式个数。
				sum = (sum + arr[(len + i - j) % len][0]) % 20201114;
			}
			arr[i][1] = sum;
		}
		// for循环多移动了一次i,这里把i移回来。
		i = (len + i - 1) % len;
		System.out.println(arr[i][1]);
	}
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虹幺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值