zoukankan      html  css  js  c++  java
  • hdu 2232 矩阵 ***

    一天四个不同的机器人a、b、c和d在一张跳舞毯上跳舞,这是一张特殊的跳舞毯,他由4个正方形毯子组成一个大的正方形毯子,一开始四个机器人分别站在4 块毯子上,舞蹈的每一步机器人可以往临近(两个毯子拥有同一条边视为临近)的一个毯子移动或停留在原来的毯子(同一块毯子可以有多个机器人停留),这个时 候机器人的制造者你想知道经过n步的移动有多少种方式可以让每个毯子上都有机器人停留。

    dp[i][j][k]表示在第i步时,从j走到k的方案数

    那么在第i+1步时从j走到k再走到k1的步数即为dp[i]*dp[1]

    写出dp[1]求出dp[i],然后乱搞一下即可

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 9937
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 typedef long long ll;
    13 #define cl(a) memset(a,0,sizeof(a))
    14 #define ts printf("*****
    ");
    15 const int MAXN=1005;
    16 int n,m,tt;
    17 ll a[4][4]=
    18 {
    19     1,1,0,1,
    20     1,1,1,0,
    21     0,1,1,1,
    22     1,0,1,1
    23 };
    24 ll dp[105][5][5];
    25 void init()
    26 {
    27     ll k,l,i,j;
    28     for (k=1;k<102;k++)
    29     {
    30         if (k==1)
    31         {
    32             for (i=0;i<4;i++)
    33             {
    34                 for (j=0;j<4;j++)
    35                 {
    36                     dp[1][i][j]=a[i][j];
    37                 }
    38             }
    39         }
    40         else
    41         {
    42             for (i=0;i<4;i++)
    43             {
    44                 for (j=0;j<4;j++)
    45                 {
    46                     dp[k][i][j]=0;
    47                     for (l=0;l<4;l++)
    48                     {
    49                         dp[k][i][j]=(dp[k][i][j]+dp[k-1][i][l]*a[l][j]%MOD)%MOD;
    50                     }
    51                 }
    52             }
    53         }
    54     }
    55 }
    56 int main()
    57 {
    58     int i,j,k,ca=1;
    59     #ifndef ONLINE_JUDGE
    60     freopen("1.in","r",stdin);
    61     #endif
    62     init();
    63     while(scanf("%d",&n)!=EOF)
    64     {
    65         ll ans=0;
    66         if(n==0)
    67         {
    68             printf("1
    ");
    69             continue;
    70         }
    71         int w[4]={0,1,2,3};
    72         while(1)
    73         {
    74             ans=(ans+(dp[n][0][w[0]]*dp[n][1][w[1]]*dp[n][2][w[2]]*dp[n][3][w[3]])%MOD)%MOD;
    75             if(!next_permutation(w,w+4)) break;
    76         }
    77         printf("%I64d
    ",ans);
    78     }
    79 }
  • 相关阅读:
    1022-哈夫曼编码与译码
    openresty 学习笔记二:获取请求数据
    openresty 学习笔记一:环境安装
    Lua在Windows下的安装、配置、运行
    Django框架中logging的使用
    死磕nginx系列--使用upsync模块实现负载均衡
    死磕nginx系列--nginx 限流配置
    死磕nginx系列--使用nginx做cache服务
    死磕nginx系列--使用nginx做负载均衡
    死磕nginx系列--nginx服务器做web服务器
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4798015.html
Copyright © 2011-2022 走看看