poj 3133 Manhattan Wiring
来源:互联网 发布:农业科技网络书屋登录 编辑:程序博客网 时间:2024/04/30 17:55
#include <iostream>
using namespace std;
#define out(x) (cout << #x << ": " << x << endl)
typedef long long int64;
const int maxint = 0x7FFFFFFF;
const int64 maxint64 = 0x7FFFFFFFFFFFFFFFLL;
template <class T> void show(T a, int n) { for (int i = 0; i < n; ++i) cout << a[i] << ' '; cout << endl; }
template <class T> void show(T a, int r, int l) { for (int i = 0; i < r; ++i) show(a[i], l); cout << endl; }
const int maxn = 10;
const int mask[11] = {1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049};
int g[maxn][maxn];
char f[maxn + 1][maxn][59049];
int n, m;
int pow3m;
inline int get_bit(int x, int k)
{
return x % mask[k + 1] / mask[k];
}
inline int set_bit(int x, int k)
{
return x - get_bit(x, k) * mask[k] - get_bit(x, k + 1) * mask[k + 1];
}
int dp()
{
pow3m = mask[m + 1];
memset(f, 0x7F, sizeof(f));
f[1][0][0] = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 0; j < m; j++)
for (int k = 0; k < pow3m; k++) if (f[i][j][k] != 0x7F)
{
int bit_j = get_bit(k, j);
int bit_j1 = get_bit(k , j + 1);
int pre_bit = set_bit(k, j);
if (g[i][j + 1] == 1)
{
if (bit_j == 0 && bit_j1 == 0)
f[i][j + 1][k] <?= f[i][j][k];
}
else if (g[i][j + 1] == 2)
{
if (bit_j + bit_j1 == 1)
f[i][j + 1][pre_bit] <?= f[i][j][k] + 1;
if (bit_j + bit_j1 == 0)
{
f[i][j + 1][pre_bit + mask[j]] <?=f[i][j][k] + 1;
f[i][j + 1][pre_bit + mask[j + 1]] <?= f[i][j][k] + 1;
}
}
else if (g[i][j + 1] == 3)
{
if (bit_j == 0 && bit_j1 == 2 || bit_j == 2 && bit_j1 == 0)
f[i][j + 1][pre_bit] <?= f[i][j][k] + 1;
if (bit_j + bit_j1 == 0)
{
f[i][j + 1][pre_bit + 2 * mask[j]] <?= f[i][j][k] + 1;
f[i][j + 1][pre_bit + 2 * mask[j + 1]] <?= f[i][j][k] + 1;
}
}
else
{
if (bit_j == 1 && bit_j1 == 0 || bit_j == 0 && bit_j1 == 1)
{
f[i][j + 1][pre_bit + mask[j]] <?= f[i][j][k] + 1;
f[i][j + 1][pre_bit + mask[j + 1]] <?= f[i][j][k] + 1;
}
if (bit_j == 0 && bit_j1 == 2 || bit_j == 2 && bit_j1 == 0)
{
f[i][j + 1][pre_bit + 2 * mask[j]] <?= f[i][j][k] + 1;
f[i][j + 1][pre_bit + 2 * mask[j + 1]] <?= f[i][j][k] + 1;
}
if (bit_j == 1 && bit_j1 == 1 || bit_j + bit_j1 == 4)
f[i][j + 1][pre_bit] <?= f[i][j][k] + 1;
if (bit_j + bit_j1 == 0)
{
f[i][j + 1][pre_bit] <?= f[i][j][k];
f[i][j + 1][pre_bit + mask[j] + mask[j + 1]] <?= f[i][j][k] + 1;
f[i][j + 1][pre_bit + 2 * mask[j] + 2 * mask[j + 1]] <?= f[i][j][k] + 1;
}
}
}
for (int k = 0; k < pow3m / 3; k++)
f[i + 1][0][k * 3] = f[i][m][k];
}
if (f[n][m][0] == 0x7F)
return 0;
else
return f[n][m][0] - 2;
}
int main()
{
while (scanf("%d%d", &n, &m), n + m != 0)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &g[i][j]);
printf("%d/n", dp());
}
return 0;
}
一款非常好的锁屏APP软件: 酷划, 不仅好用, 而且还能赚钱, 官网地址: http://www.coohua.com
- poj 3133 Manhattan Wiring
- POJ 3133 Manhattan Wiring
- POJ 3133 Manhattan Wiring
- POJ 3133 Manhattan Wiring
- poj 3133 Manhattan Wiring
- POJ 3133 Manhattan Wiring 笔记
- poj 3133 Manhattan Wiring 插头dp
- poj 3133 Manhattan Wiring 插头dp
- poj 3133 Manhattan Wiring (插头dp)
- poj 3133 -- Manhattan Wiring 插头dp
- POJ 3133 Manhattan Wiring 解题报告(插头DP)
- [省选前题目整理][POJ 3133]Manhattan Wiring(插头DP)
- poj 3133&&LA 3620 Manhattan Wiring 插头dp
- POJ 3133 Manhattan Wiring(限制匹配的插头DP)
- POJ 3113 Manhattan Wiring(插头DP)
- Manhattan Wiring poj3133
- uva1214 - Manhattan Wiring 插头DP
- [POJ3133]Manhattan Wiring 插头dp
- FPGA/CPLD入门介绍
- watir教程实例
- 给30岁的程序员
- Hadoop-0.20.0源代码分析(19)
- poj How I Mathematician Wonder What You Are! 求多边形的核
- poj 3133 Manhattan Wiring
- 我爱你---60国庆,我爱你中国
- Java核心技术①
- PKU 1986 Distance Queries LCA
- 想到的一点uml的东西 ~
- SQL Server 2005远程连接和外围应用配置器修复
- 我的心碎了
- 常指针,指针常量
- 描述符、描述符表与段选择符