Java实现 蓝桥杯 算法提高 递推求值

该博客介绍了如何使用Java编程语言解决蓝桥杯算法竞赛中关于递推求值的问题。题目要求根据给定的递推公式,计算F(n, 1)和F(n, 2)的值,并对结果取模99999999。内容涉及到大数处理和动态规划策略。" 133322411,20039151,Java实现素数判断算法详解,"['Java', '编程', '算法实现', '数学', '程序设计']

算法提高 递推求值
时间限制:1.0s 内存限制:256.0MB
问题描述
  已知递推公式:

F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5,

F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3.

初始值为:F(1, 1)=2, F(1, 2)=3, F(2, 1)=1, F(2, 2)=4, F(3, 1)=6, F(3, 2)=5。
  输入n,输出F(n, 1)和F(n, 2),由于答案可能很大,你只需要输出答案除以99999999的余数。
输入格式
  输入第一行包含一个整数n。
输出格式
  输出两行,第一行为F(n, 1)除以99999999的余数,第二行为F(n, 2)除以99999999的余数。
样例输入
4
样例输出
14

21
数据规模和约定
  1<=n<=10^18。

import java.util.Scanner;


public class 递推求值 {
	static final int mod=99999999;
	static long num[]=new long[] {6,5,1,4,2,3,1};
	static long n,ans1,ans2;
	static class Matrix{
		long mat[][]=new long[7][7];
		Matrix multi(Matrix a) {       //矩阵乘法
			Matrix rec=new Matrix();
			for(int i=0;i<7;i++) {
				for(int k=0;k<7;k++) {
					if(this.mat[i][k]!=0)
						for(int j=0;j<7;j++) {
							rec.mat[i][j]=(rec.mat[i][j]+(this.mat[i][k]*a.mat[k][j])%mod)%mod;
						}
				}
			}
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值