• 机器人的舞蹈(hdu 2232)


    机器人的舞蹈

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 292    Accepted Submission(s): 154


    Problem Description
    一天四个不同的机器人a、b、c和d在一张跳舞毯上跳舞,这是一张特殊的跳舞毯,他由4个正方形毯子组成一个大的正方形毯子,一开始四个机器人分别站在4块毯子上,舞蹈的每一步机器人可以往临近(两个毯子拥有同一条边视为临近)的一个毯子移动或停留在原来的毯子(同一块毯子可以有多个机器人停留),这个时候机器人的制造者你想知道经过n步的移动有多少种方式可以让每个毯子上都有机器人停留。
     
    Input
    对于每组数据输入一个整数n(0<=n<=100)
     
    Output
    对于每组输入输出一个整数表示方法种数,种数可能很大请对9937取模。
     
    Sample Input
    1
     
    Sample Output
    9
     
    Source
     
    Recommend
    lcy   |   We have carefully selected several similar problems for you:  2235 2233 2234 2237 2238 
    思路:总共给四个机器人那么分别记为1 2 3 4,记4个位置1 2 3 4
    开个三维数组a,第一维表示步数,第二维表示哪个机器人,第三维表示机器人所在的位置.
    那么递推a[i][j][k]=sum(a[i-1][j][s])(abs(k-s)!=2)
    那么最后枚举四个机器人所在的位置,然后sum+=四个位置方案数的乘积。
     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string.h>
     5 #include<math.h>
     6 #include<queue>
     7 #include<string.h>
     8 #include<stack>
     9 #include<vector>
    10 #include<map>
    11 #define sc(x) scanf("%I64d",&x)
    12 #define pr(x) printf("%I64d",x)
    13 #define prr(x) printf("%I64d
    ",x)
    14 #define prrr(x) printf(" %I64d",x)
    15 #define FOR(i,p,q) for(int i=p;i<=q;i++)
    16 const int NN=9937;
    17 using namespace std;
    18 int a[101][5][5];
    19 int main(void)
    20 {
    21     int n,i,j,k,p,q,kk;
    22     for(i=1; i<=4; i++)
    23     {
    24         for(j=1; j<=4; j++)
    25         {
    26             if(i==j)
    27             {
    28                 a[0][i][j]=1;
    29             }
    30             else a[0][i][j]=0;
    31         }
    32     }//当为0步的时候的初始状态
    33     for(i=1; i<=100; i++)
    34         for(kk=1; kk<=4; kk++)
    35             for(j=1; j<=4; j++)
    36                 for(int zz=1; zz<=4; zz++)
    37                     if(abs(zz-j)!=2)
    38                         a[i][kk][j]=(a[i][kk][j]+a[i-1][kk][zz])%9937;//递推计算第几步的时候的每个机器人所对应4个位置的方案数
    39 
    40     int ak[101];
    41     int t[5];//判断是否在不同的4个位置
    42     for(i=1; i<=100; i++)
    43     {
    44         int sum=0;memset(t,0,sizeof(t));
    45         for(int r=1; r<=4; r++)//枚举24种状态
    46         {
    47             t[r]++;
    48             for(int z=1; z<=4; z++)
    49             {
    50                 t[z]++;
    51                 for(int s=1; s<=4; s++)
    52                 {
    53                     t[s]++;
    54                     for(int y=1; y<=4; y++)
    55                     {
    56                         t[y]++;
    57                         int uu=0;
    58                         for(int rt=1; rt<=4; rt++)
    59                         {
    60                             if(t[rt]!=0)
    61                             {
    62                                 uu++;
    63                             }
    64                         }
    65                         if(uu==4)
    66                         {
    67                             int sum1=((a[i][1][r]%NN*a[i][2][z]%NN)%NN*(a[i][3][s]%NN*a[i][4][y]%NN)%NN)%NN;
    68                             if(sum1<0)
    69                             {
    70                                 printf("%d %d
    ",a[i][3][s],a[i][4][y]);
    71                                 printf("%d
    ",sum1);
    72                             }
    73                             sum=(sum+sum1)%NN;
    74 
    75                         }
    76                         t[y]--;
    77                     }
    78                     t[s]--;
    79                 }
    80                 t[z]--;
    81             }
    82             t[r]--;
    83         }
    84         ak[i]=sum;
    85 
    86     }
    87     while(scanf("%d",&k)!=EOF)
    88     {
    89         printf("%d
    ",ak[k]);
    90     }
    91     return 0;
    92 }
    油!油!you@
  • 相关阅读:
    leetcode821
    leetcode872
    leetcode700
    leetcode806
    2019-9-2-win10-uwp-右击浮出窗在点击位置
    2019-9-2-win10-uwp-打包第三方字体到应用
    2019-10-18-dotnet-文件读写务必注意事项
    2018-8-10-win10-uwp-如何创建修改保存位图
    2018-8-9-win10-uwp-装机必备应用-含源代码
    2019-11-1-asp-dotnet-core-简单开发P2P中央服务器
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5145511.html
Copyright © 2020-2023  润新知