好吧发现大部分题解都是动态规划。。
也对,最长递减子序列嘛,其实我觉得我现在简直相当于不会动态规划的样子。。
搜索也很裸,,
#include<stdio.h>
#include<iostream>
#define max 110
using namespace std;
int map[max][max],sum,r,c;
int po[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
struct node{
int value,step;
}node[110][110];
int ok(int x,int y)
{
if(x<0||x>=r||y<0||y>=c)return 0;
else return 1;
}
void dfs(int x,int y)
{
int a,b;
int step=node[x][y].step;
int value=node[x][y].value;
for(int i=0;i<4;i++)
{
a=x+po[i][0];
b=y+po[i][1];
if(ok(a,b)&&node[a][b].value>value&&node[a][b].step<step+1)
{
node[a][b].step=step+1;
dfs(a,b);
}
}
}
int main()
{
while(scanf("%d%d",&r,&c)!=EOF)
{
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
cin>>node[i][j].value;
node[i][j].step=1;
}
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(node[i][j].step==1)
dfs(i,j);
else continue;
}
int maxx=-1;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(node[i][j].step>maxx)maxx=node[i][j].step;
}
}
printf("%d\n",maxx);
}
return 0;
}