问题:
算法:动态规划
来源:算法课程盗取的vijos题
思路:
不会,参考大佬:
阶段:地图上的任意一个位置
状态:设f(i,j)表示(i,j)这个位置的最长路径
决策:f(i,j)=max{f(i-1,j),f(i,j-1),f(i+1,j),f(i,j+1)}+1
很明显有后效性,所以采用递归进行消除
代码:
int m,n;
int A[600][600];
int B[600][600];
int dp(int x,int y)
{
if(B[x][y]) return B[x][y];
int w;
if(x>0 && A[x-1][y]<A[x][y])
{
w=dp(x-1,y);
if(w>B[x][y]) B[x][y]=w;
}
if(y>0 && A[x][y-1]<A[x][y])
{
w=dp(x,y-1);
if(w>B[x][y]) B[x][y]=w;
}
if(x<m-1 && A[x+1][y]<A[x][y])
{
w=dp(x+1,y);
if(w>B[x][y]) B[x][y]=w;
}
if(y<n-1 && A[x][y+1]<A[x][