您的位置:首页 > 其它

POJ1088 滑雪

2014-03-14 21:27 323 查看
思考:动态规划,填表格。

#include <cstdio>
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 110;

struct info {
int row;
int col;
int value;
};
int table[maxn][maxn]; //dp
int data[maxn][maxn];// input data

vector<info> V;
int gr, gc;
int ans;

bool cmp(info x, info y) {
if(x.value > y.value) return true;
else return false;
}

void update(int x, int y)
{
if(x > 1) {
if(data[x][y] < data[x-1][y])
table[x][y] = max(table[x][y], table[x-1][y]+1);
}
if(y > 1) {
if(data[x][y] < data[x][y-1])
table[x][y] = max(table[x][y], table[x][y-1]+1);
}
if(x < gr) {
if(data[x][y] < data[x+1][y])
table[x][y] = max(table[x][y], table[x+1][y]+1);
}
if(y < gc) {
if(data[x][y] < data[x][y+1])
table[x][y] = max(table[x][y], table[x][y+1]+1);
}
if(table[x][y] > ans) ans = table[x][y];
}

int work()
{
int bound = (int)V.size();
info now;
int x, y, value;
for(int i = 0; i < bound; i++) {
now = V[i];
x = now.row; y = now.col; value = now.value;
table[x][y] = 1;
update(x, y);
}
return ans;
}

int main()
{
int tmp;
info read;
while(scanf("%d%d", &gr, &gc) != EOF) {
memset(table, 0, sizeof(table));
ans = 0;
V.clear();
for(int i = 1; i <= gr; i++) {
for(int j = 1; j <= gc; j++) {
scanf("%d", &tmp);
read.row = i; read.col = j; read.value = tmp;
V.push_back(read);
data[i][j] = tmp;
}
}
sort(V.begin(), V.end(), cmp);
int result = work();
printf("%d\n", result);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: