zoukankan      html  css  js  c++  java
  • lightoj 1244

    思路:状态DP

    dp[i]=2*dp[i-1]+dp[i-3]

    代码如下:

    求出循环节部分

     1 #include<stdio.h>
     2 #define m 10007
     3 int p[m];
     4 int main()
     5 {
     6     p[0]=p[1]=1;p[2]=2;
     7     for(int i=3;i<m;i++){
     8         p[i]=2*p[i-1]+p[i-3];
     9         p[i]%=m;
    10     }
    11     int t,ca=0,n;
    12     scanf("%d",&t);
    13     while(t--){
    14         scanf("%d",&n);
    15         printf("Case %d: %d
    ",++ca,p[n%(m-1)]);
    16     }
    17     return 0;
    18 }
    View Code

     

    用矩阵快速幂求

     

     1 #include<stdio.h>
     2 #include<cstring>
     3 #define mod 10007
     4 struct mat
     5 {
     6     int m[3][3];
     7 }e,d;
     8 int an[3]={2,1,1};
     9 mat Mul(mat a,mat b)
    10 {
    11     mat ans;
    12     for(int i=0;i<3;i++)
    13     for(int j=0;j<3;j++){
    14         ans.m[i][j]=0;
    15         for(int k=0;k<3;k++)
    16             ans.m[i][j]+=a.m[i][k]*b.m[k][j];
    17         ans.m[i][j]%=mod;
    18     }
    19     return ans;
    20 }
    21 int Pow(int n)
    22 {
    23     mat ans=e,a=d;
    24     while(n){
    25         if(n&1) ans=Mul(ans,a);
    26         n>>=1;
    27         a=Mul(a,a);
    28     }
    29     return ans.m[0][0];
    30 }
    31 int main()
    32 {
    33     memset(e.m,0,sizeof(e.m));
    34     memset(d.m,0,sizeof(d.m));
    35     for(int i=0;i<3;i++) e.m[0][i]=an[i];
    36     d.m[0][1]=d.m[1][2]=d.m[2][0]=1;
    37     d.m[0][0]=2;
    38     int t,n,ca=0;
    39     scanf("%d",&t);
    40     while(t--){
    41         scanf("%d",&n);
    42         printf("Case %d: ",++ca);
    43         if(n==1) printf("1
    ");
    44         else printf("%d
    ",Pow(n-2));
    45     }
    46     return 0;
    47 }
    View Code

     

     

     

     

  • 相关阅读:
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    2013551822第一次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3362312.html
Copyright © 2011-2022 走看看