博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1088解题报告
阅读量:5846 次
发布时间:2019-06-18

本文共 1653 字,大约阅读时间需要 5 分钟。

今天是元宵节,外面的鞭炮声很大。元宵晚会已经成了那些人的KTV了。我还是总结一下白天的题目好了。 是一道在二维数组上的最长下降子序列或者最长上升子序列问题。很自然会用h[i][j]来表示到(i,j)位置的最长上升子序列的长度。考虑状态转移方程,与之有关系的是:
  1. h[i - 1][j]
  2. h[i][j - 1]
  3. h[i + 1][j]
  4. h[i][j + 1]
状态转移方程如下:
h[i][j] = max(h[i - 1][j],h[i][j - 1],h[i + 1][j],h[i][j + 1]) + 1,
if  a[i - 1][j] < a[i][j] or a[i][j - 1] < a[i][j] or a[i + 1][j] < a[i][j] or a[i][j + 1] < a[i][j]
上面的状态转移方程没有问题。但是我们更应该关注计算的顺序。如果,按照一行一行的来,会发现,自底向上计算的时候,一些没有计算过。所以,这个顺序是不行的。那只能换个思路,通过思考我们可以知道,在计算最小值的时候,h[i][j]的时候,更小的值没有,就可认为是已经知道的,然后再计算次小的,就是最小的已知,可计算。则可知,需要对高度进行排序。代码如下:
#include #include #include struct Pos {	int x, y, height;};int r, c, m, max_h;int h[110][110], a[110][110];struct Pos map[10100];int d[4][2] = {
{0, 1}, {0, -1}, {-1, 0}, {1, 0}};int cmp(const void* a,const void* b){ if(((struct Pos*)a)->height > ((struct Pos*)b)->height) return 1; if(((struct Pos*)a)->height < ((struct Pos*)b)->height) return -1; return 0;}int main() { scanf("%d%d", &r, &c); m = 0; memset(a, sizeof(a), 0); memset(h, sizeof(h), 0); for (int i = 1; i <= r; ++i) for (int j = 1; j <= c; ++j) { map[m].x = i; map[m].y = j; scanf("%d", &map[m].height); a[i][j] = map[m].height; h[i][j] = 1; ++m; } qsort(map, r * c, sizeof(struct Pos), cmp); max_h = -1; for (int i = 0; i < m; ++i) { for (int j = 0; j < 4; ++j) { int cx = map[i].x + d[j][0]; int cy = map[i].y + d[j][1]; if (a[cx][cy] < map[i].height && h[map[i].x][map[i].y] <= h[cx][cy]) h[map[i].x][map[i].y] = h[cx][cy] + 1; } if (h[map[i].x][map[i].y] > max_h) max_h = h[map[i].x][map[i].y]; } printf("%d\n", max_h); return 0;}

转载于:https://www.cnblogs.com/sing1ee/archive/2012/02/06/2765010.html

你可能感兴趣的文章
软RAID管理命令mdadm详解
查看>>
控制器 控制器view cell的关系
查看>>
Eclipse RCP 玩转 Spring
查看>>
我的友情链接
查看>>
Nginx的健康检查机制
查看>>
esxi虚拟机中系统克隆及迁移的方法
查看>>
App_Offline.htm 功能
查看>>
java之旅
查看>>
解决linux虚拟机不能上网的问题
查看>>
HandlerExceptionResolver异常解析器家族揭秘
查看>>
Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
查看>>
RHEL6.3 源码安装Puppet
查看>>
mybatis 和 hibernate 区别?
查看>>
初级文件系统管理之一
查看>>
Mac软件下载备忘
查看>>
java 泛型初探
查看>>
Golang安装包go get使用代理
查看>>
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
查看>>
就是一个表格
查看>>
CakePHP 2.x CookBook 中文版 第三章 入门 之 CakePHP 的结构
查看>>