zoukankan      html  css  js  c++  java
  • POJ 3036 Honeycomb Walk

    http://poj.org/problem?id=3036

    在每一个格子可以转移到与这个各自相邻的六个格子

    那么设置转移变量 只需要六个 int d[6][2] = {-1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0, -1};
    然后设dp[i][j][k] : 第i步走到(j ,k) 的方式数

    那么转移方程:

    for (int m = 0; m < 6; m++)

    dp[i][j][k] += dp[i-1][j+d[m][0]][k+d[m][1]]

    三个维度的状态 最后得到dp[n][O][O] 就是最后回到原点的个数 六边形只需要坐标六个变化

    因为最多n = 14

    最多上下最多可以走14 / 2 = 7个

    所以设置(7 , 7) 为原点

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #define INF 0x3fffffff
     5 using namespace std;
     6 
     7 
     8 long long dp[16][32][32];
     9 int d[6][2] = {-1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0, -1}; //开始坐标标错了
    10 int dx[]={1,0,1,-1,0,-1};
    11 int dy[]={0,1,1,0,-1,-1};
    12 int main()
    13 {
    14     memset(dp, 0, sizeof(dp));
    15     dp[0][7][7] = 1;
    16     for (int i = 1; i <= 14; i++)
    17         for(int j = 0; j <= 14; j++)
    18             for(int k = 0; k <= 14; k++)
    19                 for(int m = 0; m < 6; m++)
    20                     dp[i][j][k] += dp[i-1][j+d[m][0]][k+d[m][1]];
    21     int T;
    22     cin >> T;
    23     while (T--)
    24     {
    25         int n;
    26         cin >> n;
    27         cout << dp[n][7][7] << endl;
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    递归和回溯的区别
    N皇后问题
    c输出格式
    python sublime run快捷键设置
    八皇后问题
    动态规划---从左上角到右下角的价值最大的路径
    莫队算法详解和c实现
    Shell 常用命令总结
    WeakHashMap和HashMap的区别
    【 Jquery插件】引导用户如何操作网站功能的向导
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6745464.html
Copyright © 2011-2022 走看看