L[i][j]表示从点(i,j)出发的最长的滑雪长度
人人为我型:
#include<iostream>
#include <memory.h>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#define MaxLen 10005
using namespace std;
struct node
{
int row,col;
int height;
};
bool cmp(const node &a,const node &b)
{
return a.height < b.height;
}
node h[MaxLen];
int skate[105][105];
int l[105][105];
int main()
{
int row,col;
cin >> row >> col;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
cin >> skate[i][j];
h[i*col+j].height = skate[i][j];
h[i*col+j].row = i;
h[i*col+j].col = j;
}
sort(h,h+row*col,cmp);
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
l[i][j] = 1;
for(int i=0;i<row*col;i++)
{
int x = h[i].row;
int y = h[i].col;
int TempH = skate[x][y];
if(TempH > skate[x-1][y]&& x > 0)
{
l[x][y] = max(l[x-1][y]+1,l[x][y]);
}
if(TempH > skate[x+1][y] && x<row-1)
{
l[x][y] = max(l[x][y],l[x+1][y]+1);
}
if(TempH > skate[x][y-1] && y>0)
{
l[x][y] = max(l[x][y],l[x][y-1]+1);
}
if(TempH > skate[x][y+1] && y<col-1)
{
l[x][y] = max(l[x][y],l[x][y+1]+1);
}
}
int Max = 0;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
Max = max(Max,l[i][j]);
cout << Max << endl;
return 0;
}
我为人人型
#include<iostream>
#include <memory.h>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#define MaxLen 10005
using namespace std;
struct node
{
int row,col;
int height;
};
bool cmp(const node &a,const node &b)
{
return a.height < b.height;
}
node h[MaxLen];
int skate[105][105];
int l[105][105];
int main()
{
int row,col;
cin >> row >> col;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
cin >> skate[i][j];
h[i*col+j].height = skate[i][j];
h[i*col+j].row = i;
h[i*col+j].col = j;
}
sort(h,h+row*col,cmp);
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
l[i][j] = 1;
for(int i=0;i<row*col;i++)
{
int x = h[i].row;
int y = h[i].col;
int TempH = skate[x][y];
if(TempH < skate[x-1][y]&& x > 0)
{
l[x-1][y] = max(l[x-1][y],l[x][y]+1);
}
if(TempH < skate[x+1][y] && x<row-1)
{
l[x+1][y] = max(l[x+1][y],l[x][y]+1);
}
if(TempH < skate[x][y-1] && y>0)
{
l[x][y-1] = max(l[x][y-1],l[x][y]+1);
}
if(TempH < skate[x][y+1] && y<col-1)
{
l[x][y+1] = max(l[x][y+1],l[x][y]+1);
}
}
int Max = 0;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
Max = max(Max,l[i][j]);
cout << Max << endl;
return 0;
}