算法提高 递推求值

时间限制: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);
}
} }

最新文章

  1. CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout使用
  2. Windows Server 2012 虚拟化实战:存储(一)
  3. Mensa Intellect test
  4. 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
  5. WebService使用的一些总结
  6. 网站被百度和google封了,怎么办?
  7. 一步一步学EF系列【4、升级篇 实体与数据库的映射】live writer真坑,第4次补发
  8. Oracle Day2 过滤、排序、单行函数
  9. 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
  10. struts.xml语法
  11. laytpl : 一款非常轻量的JavaScript模板引擎
  12. Error code:1728 Cannot load from mysql.proc. The table is probably corrupted
  13. java里程碑之泛型--类型通配符
  14. sublime text 3启动报错&quot;swallow_startup_errors&quot;解决方法
  15. 20155202《网络对抗》Exp9 web安全基础实践
  16. win7下使用Taste实现协同过滤算法
  17. nginx虚拟目录配置
  18. Django template 过滤器
  19. B2
  20. SSM 框架-06-详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis)

热门文章

  1. ASP.NET Core on K8S学习之旅(13)Ocelot API网关接入
  2. fragment hide/show 生命周期
  3. java -&gt;Servlet接口
  4. 消息队列之Kafka——从架构技术重新理解Kafka
  5. Python中内置函数
  6. pytest——pycharm中右击运行(run)没有问题,在terminal中运行pytest报错:E ModuleNotFoundError: No module named
  7. C#如何给WinForm的button等控件添加快捷键
  8. 你不知道的事---SringCloud的feign的继承特性
  9. 【雕爷学编程】MicroPython动手做(01)——春节后入手了K210开发板
  10. 5.5 Go defer