• hdoj 2157 How many ways??


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157 

    解题思路:矩阵快速幂

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int n;  //n个点,对应nxn矩阵
     5 
     6 struct Matrix{
     7     int a[20][20];
     8 }res;
     9 
    10 Matrix multiply(Matrix x,Matrix y){
    11     Matrix temp;
    12     for(int i=0;i<n;i++){
    13         for(int j=0;j<n;j++){
    14             temp.a[i][j]=0;
    15             for(int k=0;k<n;k++) temp.a[i][j]+=x.a[i][k]*y.a[k][j];
    16             temp.a[i][j]%=1000;
    17         }
    18     }
    19     return temp;
    20 }
    21 
    22 void calc(Matrix origin,int k){
    23     while(k){
    24         if(k&1) res=multiply(res,origin);
    25         k>>=1;
    26         origin=multiply(origin,origin);
    27     }
    28 }
    29 
    30 int main(){
    31     int m,t,A,B,k,i,j;
    32     Matrix origin;
    33     while(cin>>n>>m,n||m){
    34 
    35         //构造对应的矩阵
    36         for(i=0;i<n;i++){
    37             for(j=0;j<n;j++) origin.a[i][j]=0;
    38         }
    39         while(m--){
    40             cin>>i>>j;
    41             origin.a[i][j]=1;
    42         }
    43 
    44         cin>>t;
    45         while(t--){
    46             cin>>A>>B>>k;
    47 
    48             //初始化res为单位矩阵
    49             for(i=0;i<n;i++){
    50                 for(j=0;j<n;j++) res.a[i][j]=0;
    51                 res.a[i][i]=1;
    52             }
    53 
    54             calc(origin,k);
    55             cout<<res.a[A][B]<<endl;
    56         }
    57     }
    58     return 0;
    59 }

  • 相关阅读:
    AVL树C++实现(end)
    B树/B+树
    树,森林,二叉树转换
    多路查找树
    变形版的九九乘法表
    原始版本的九九乘法表
    菱形变形-闪电
    菱形变形,对称+for循环
    菱形--for循环解决
    BZOJ 2037 区间DP
  • 原文地址:https://www.cnblogs.com/linqiuwei/p/3141434.html
Copyright © 2020-2023  润新知