Java实现 蓝桥杯 算法提高 递推求值
2024-10-09 04:10:52
算法提高 递推求值
时间限制: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;
}
}
}
return rec;
}
}
//ST表示该方阵,E表示单位矩阵(其地位相当于整数1)
static Matrix ST=new Matrix(),E=new Matrix();
static void init() { //初始化
for(int i=0;i<7;i++)
E.mat[i][i]=1;
ST.mat[0][1]=1;ST.mat[0][4]=2;ST.mat[0][6]=5;
ST.mat[1][0]=1;ST.mat[1][4]=3;ST.mat[1][5]=2;ST.mat[1][6]=3;
ST.mat[2][0]=1;
ST.mat[3][1]=1;
ST.mat[4][2]=1;
ST.mat[5][3]=1;
ST.mat[6][6]=1;
}
static Matrix matrix_pow(long n) { //矩阵快速幂
Matrix rec=E,base=ST;
while(n!=0) {
if(n%2==1) {
rec=rec.multi(base);
}
base=base.multi(base);
n=n>>1;
}
return rec;
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
n=cin.nextLong();
if(n<4) {
int index=(int)(3-n)*2;
System.out.println(num[index]);
System.out.println(num[index+1]);
}else {
init();
ST=matrix_pow(n-3);
for(int i=0;i<7;i++) {
ans1=(ans1+(ST.mat[0][i]*num[i])%mod)%mod; //求F(n,1)
ans2=(ans2+(ST.mat[1][i]*num[i])%mod)%mod; //求F(n,2)
}
System.out.println(ans1);
System.out.println(ans2);
}
}
}
最新文章
- CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout使用
- Windows Server 2012 虚拟化实战:存储(一)
- Mensa Intellect test
- java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.LoginActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class
- WebService使用的一些总结
- 网站被百度和google封了,怎么办?
- 一步一步学EF系列【4、升级篇 实体与数据库的映射】live writer真坑,第4次补发
- Oracle Day2 过滤、排序、单行函数
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- struts.xml语法
- laytpl : 一款非常轻量的JavaScript模板引擎
- Error code:1728 Cannot load from mysql.proc. The table is probably corrupted
- java里程碑之泛型--类型通配符
- sublime text 3启动报错";swallow_startup_errors";解决方法
- 20155202《网络对抗》Exp9 web安全基础实践
- win7下使用Taste实现协同过滤算法
- nginx虚拟目录配置
- Django template 过滤器
- B2
- SSM 框架-06-详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis)
热门文章
- ASP.NET Core on K8S学习之旅(13)Ocelot API网关接入
- fragment hide/show 生命周期
- java ->;Servlet接口
- 消息队列之Kafka——从架构技术重新理解Kafka
- Python中内置函数
- pytest——pycharm中右击运行(run)没有问题,在terminal中运行pytest报错:E ModuleNotFoundError: No module named
- C#如何给WinForm的button等控件添加快捷键
- 你不知道的事---SringCloud的feign的继承特性
- 【雕爷学编程】MicroPython动手做(01)——春节后入手了K210开发板
- 5.5 Go defer