zoukankan      html  css  js  c++  java
  • 机器人的舞蹈(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@
  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5145511.html
Copyright © 2011-2022 走看看