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 }
  • 相关阅读:
    Android WebView使用
    Android
    Instant Buy Android API Tutorial
    cocos2dx 手势识别
    cocos2d-x 判断两条直线是否相交
    golang 环境bash 以及shell
    技术描述
    golang web开发获取get、post、cookie参数
    Linux curl 模拟form表单提交信息和文件
    Golang HTTP文件上传
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6745464.html
Copyright © 2011-2022 走看看