poj 2329 Nearest number - 2
来源:互联网 发布:数据降维方法 编辑:程序博客网 时间:2024/06/05 02:53
三维dp数组实现
#include<iostream>#include<string.h>#include<math.h>#include<fstream>#include<algorithm>#include<stdio.h>#include<queue>#include<vector> #define MAXSIZE 100using namespace std;const int INF = 1<<30;#define max(a, b) ((a) > (b) ? (a) : (b))#define min(a, b) ((a) < (b) ? (a) : (b))int matrix[210][210];int target[210][210];int dyna[4][210][210];int main (){ //freopen("data_2329.txt","r",stdin); int n, i, j, k, l, st, ed, dis, r; scanf("%d", &n); for (k = 0; k < 4; k++) { for (i = 0; i <= n + 1; i++) { for (j = 0; j <= n + 1; j++) dyna[k][i][j] = INF; } } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) scanf("%d", &matrix[i][j]); } for (i = 2; i <= 2 * n; i++) { if (i <= n + 1) st = i - 1, ed = 1; else st = n, ed = i - n; for (j = st; j >= ed; j--) { if (matrix[j][i - j]) dyna[0][j][i - j] = 0; else dyna[0][j][i - j] = min(dyna[0][j][i - j - 1] + 1, dyna[0][j - 1][i - j] + 1); if (matrix[n - j + 1][i - j]) dyna[1][n - j + 1][i - j] = 0; else dyna[1][n - j + 1][i - j] = min(dyna[1][n - j + 1][i - j - 1] + 1, dyna[1][n - j + 2][i - j] + 1); if (matrix[j][n - i + j + 1]) dyna[2][j][n - i + j + 1] = 0; else dyna[2][j][n - i + j + 1] = min(dyna[2][j][n - i + j + 2] + 1, dyna[2][j - 1][n - i + j + 1] + 1); if (matrix[n - j + 1][n - i + j + 1]) dyna[3][n - j + 1][n - i + j + 1] = 0; else dyna[3][n - j + 1][n - i + j + 1] = min(dyna[3][n - j + 2][n - i + j + 1] + 1, dyna[3][n - j + 1][n - i + j + 2] + 1); } } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { if (matrix[i][j]) target[i][j] = matrix[i][j]; else { dis = min(min(dyna[0][i][j], dyna[1][i][j]), min(dyna[2][i][j], dyna[3][i][j])); r = -1; if (dis < INF) for (k = 0; k <= dis; k++) { l = dis - k; if (i - k >= 1 && j - l >= 1) { if (matrix[i - k][j - l]) { if (r == -1) r = matrix[i - k][j - l]; else { r = 0; break; } } } if (i + k <= n && j - l >= 1 && k != 0) { if (matrix[i + k][j - l]) { if (r == -1) r = matrix[i + k][j - l]; else { r = 0; break; } } } if (i - k >= 1 && j + l <= n && l != 0) { if (matrix[i - k][j + l]) { if (r == -1) r = matrix[i - k][j + l]; else { r = 0; break; } } } if (i + k <= n && j + l <= n && k != 0 && l != 0) { if (matrix[i + k][j + l]) { if (r == -1) r = matrix[i + k][j + l]; else { r = 0; break; } } } } target[i][j] = max(0, r); } } } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) printf("%d ", target[i][j]); printf("\n"); } return 0;}
0 0
- poj 2329 Nearest number - 2
- POJ-2329 Nearest number - 2
- POJ 2329 Nearest number
- POJ 2329 Nearest number
- poj Nearest number - 2
- POJ-2329 Nearest number - 2(BFS)
- poj 2329 Nearest number - 2 这道题广搜为什么就是wa啊!!求解
- POJ2329 Nearest number - 2 [BFS]
- 2239 Nearest number - 2 解题报告
- zoj2437-Nearest number(wa)
- POJ Nearest Common Ancestors
- Nearest Common Ancestors POJ
- POJ 1330 Nearest Common Ancestor
- POJ 1330 Nearest Common Ancestors
- poj 1330 Nearest Common Ancestors
- poj 1330 Nearest Common Ancestors
- POJ 1330 Nearest Common Ancestors
- POJ 1330 Nearest Common Ancestors
- ListView的onItemClickListener不起作用解决办法
- Oracle未选定行的问题
- Tomcat 5.x使EL表达式不被解析的解决办法
- Chapter 2:Guidelines for Python Developers
- 用里氏代换原则来处理动画类的继承问题
- poj 2329 Nearest number - 2
- 字符串比较 c语言
- Swift中的!和?
- HTML传递参数给JS
- FIRST DAY
- hibernate关联对象的增删改查------查
- wince开发_摩托罗拉MC3100_打开条码设置
- Map集合
- C++链表模板类