zoukankan      html  css  js  c++  java
  • HDU更多的学校比赛9场 HDU 4965Fast Matrix Calculation【矩阵运算+数学技巧】

    困难,。,真,,,不是太困难

    的问题是,有一个矩阵运算优化

    您有权发言权N*K矩阵A给K*N矩阵B(1<=N<=1000 && 1=<K<=6)。他们拿起了第一次骑马C矩阵,再算上C^(N*N)

    当于

    ABABABABABABAB...=(AB)^(N*N)

    不如

    A(BA)^(N*N-1)B

    由于BA乘得K*K的矩阵,K是比較小的

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int a[1111][1111];
    int b[1111][1111];
    int c[1111][1111];
    int tmp[1111][1111];
    int sum[1111][1111];
    void TIMES(int K,int N,int M,int aa[][1111],int bb[][1111],int cc[][1111]){
    	memset(tmp,0,sizeof(tmp));
    	for(int i=1;i<=K;i++){
    		for(int j=1;j<=M;j++){
    			for(int k=1;k<=N;k++){
    				tmp[i][j]=(tmp[i][j]+aa[i][k]*bb[k][j]%6)%6;
    			}
    		}
    	}
    	for(int i=1;i<=K;i++)
    		for(int j=1;j<=M;j++)
    			cc[i][j]=tmp[i][j]%6;
    }
    void quick(int cc[][1111],int mi,int n){
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			if(i==j) sum[i][j]=1;
    			else sum[i][j]=0;
    	while(mi){
    		if(mi&1)
    			TIMES(n,n,n,cc,sum,sum);
    		TIMES(n,n,n,cc,cc,cc);
    		mi>>=1;
    	}
    }
    int main(){
    #ifndef ONLINE_JUDGE
    	freopen("G:/in.txt","r",stdin);
    	//freopen("G:/myout.txt","w",stdout);
    #endif
    	int N,K;
    	while(~scanf("%d%d",&N,&K)){
    		if(N==0 && K==0) return 0;
    		for(int i=1;i<=N;i++){
    			for(int j=1;j<=K;j++){
    				scanf("%d",&a[i][j]);
    			}
    		}
    		for(int i=1;i<=K;i++){
    			for(int j=1;j<=N;j++){
    				scanf("%d",&b[i][j]);
    			}
    		}
    		TIMES(K,N,K,b,a,c);
    		quick(c,N*N-1,K);
    		TIMES(N,K,K,a,sum,sum);
    		TIMES(N,K,N,sum,b,sum);
    		int ans=0;
    		for(int i=1;i<=N;i++)
    			for(int j=1;j<=N;j++)
    				ans+=sum[i][j];
    		cout<<ans<<endl;
    	}
    }
    


     

  • 相关阅读:
    307. Range Sum Query
    OLI 课程 & Java入学考试的五道题
    745. Prefix and Suffix Search 查找最大index的单词
    38.Count and Say 报数
    721. Accounts Merge合并电子邮件账户
    265. Paint House II 房子涂色K种选择的版本
    【转】如何做人性化的代码审查?从高到低、用例子
    java之struts2之文件下载
    java之struts2之文件上传
    java之struts2之拦截器
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4594923.html
Copyright © 2011-2022 走看看