zoukankan      html  css  js  c++  java
  • Codeforces 185A Plant( 递推关系 + 矩阵快速幂 )


    链接:传送门

    题意:输出第 n 年向上小三角形的个数 % 10^9 + 7

    思路:

    • 设 Fn 为第 n 年向上小三角形的个数,经过分析可以得到 Fn = 3 * Fn-1 + ( 4^(n-1) - Fn-1 ),根据这个递推式可以用矩阵快速幂来解决。

    • 下面三个矩阵设为矩阵 a ,b ,ans

      • 矩阵 a:
      2 1
      0 4
      • 矩阵 b:
      Fn-1 0
      4^(n-1) 0
      • 矩阵 ans:
      Fn 0
      4^n 0
      • 这样就可以表示出 上方递推关系了 ,所以 ans = Matrixpow( a, n-1 ) * b( n > 1 )

    balabala:看来矩阵快速幂一般和递推关系相结合呀~


    /*************************************************************************
        > File Name: codeforces185At2.cpp
        > Author:    WArobot 
        > Blog:      http://www.cnblogs.com/WArobot/ 
        > Created Time: 2017年05月03日 星期三 19时42分09秒
     ************************************************************************/
    
    #include<bits/stdc++.h>
    using namespace std;
    
    const int MOD = 1000000007;
    const int maxn = 3;
    #define ll long long
    #define mod(x) ((x)%MOD)
    
    struct mat{
    	int m[maxn][maxn];
    }unit;
    
    mat operator *(mat a,mat b){
    	mat ret;
    	ll  x;
    	for(int i=0;i<2;i++){
    		for(int j=0;j<2;j++){
    			x = 0;
    			for(int k=0;k<2;k++)
    				x += mod( (ll)a.m[i][k]*b.m[k][j] );
    			ret.m[i][j] = x;
    		}
    	}
    	return ret;
    }
    mat pow_mat(mat a,ll x){
    	mat ret = unit;
    	while(x){
    		if(x&1)	ret = ret*a;
    		a = a*a;
    		x >>= 1;
    	}
    	return ret;
    }
    void init_unit(){
    	for(int i=0;i<2;i++)	unit.m[i][i] = 1;
    	return;
    }
    
    mat a,b;
    void init(){
    	memset(a.m,0,sizeof(a.m));
    	memset(b.m,0,sizeof(b.m));
    	a.m[0][0] = 2; a.m[0][1] = 1; a.m[1][1] = 4;
    	b.m[0][0] = 3; b.m[1][0] = 4;
    }
    int main(){
    	init_unit();
    	init();
    	ll n;
    	while(cin>>n){
    		if(n==0)		cout<<"1"<<endl;
    		else if(n==1)	cout<<"3"<<endl;
    		else{
    			mat ans = pow_mat(a,n-1);
    			ans = ans*b;
    			cout<< mod(ans.m[0][0]) <<endl;	
    		}
    	}
    	return 0;
    }
  • 相关阅读:
    asp.net 网页标题、关键字、描述
    星级评分jQuery插件
    以jquery为基础的星星评分
    投票系统显示结果jQuery插件
    JAVASCRIPT模拟模式对话窗口
    Repeater 嵌套代码
    window服务程序安装卸载批处理文件
    c#window程序开发入门系列自学笔记
    jquery 模式对话框改进版
    php的正则表达式完全手册
  • 原文地址:https://www.cnblogs.com/WArobot/p/6803796.html
Copyright © 2011-2022 走看看