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;
}
#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;
}
相关文章推荐
- poj 1088滑雪
- poj 1088 滑雪 dfs+动规
- POJ-1088-滑雪(记忆化搜索)
- poj1088 滑雪问题 dp写法
- POJ 1088 滑雪 (经典DP)
- 滑雪_poj_1088(记忆化搜索).java
- poj 百练1088滑雪路线问题 动态规划
- poj 1088 滑雪 【记忆化搜索】+【DFS】
- (poj 1088 滑雪) <记忆化搜索>
- poj 1088 滑雪
- poj 1088 滑雪【动态规划】
- POJ - 1088 滑雪
- poj 1088 滑雪(记忆化搜索/动态规划)
- POJ 1088 滑雪 (记忆化搜索)
- poj 1088 滑雪
- POJ 1088 滑雪 动态规划
- poj 1088滑雪 记忆化搜索
- POJ 1088滑雪(记忆化搜索)
- POJ-1088-滑雪
- POJ 1088 滑雪