DP+记忆化搜索 dp[i][j]表示以map[i][j]为起点路径搜索得到的的和的最大值。所以最后的结果自然为dp[0][0]了。
#include<iostream>
using namespace std;
int map[100][100],dp[100][100];
int dirx[4]={1,-1,0,0};
int diry[4]={0,0,-1,1};
int n,k;
int max(int x,int y)
{
if(x>y) return x;
return y;
}
int dfs(int x,int y)
{
if(dp[x][y]>-1)
return dp[x][y];
dp[x][y]=map[x][y];
for(int i=0;i<4;i++)
{
for(int j=1;j<=k;j++)
{
int xx=x+j*dirx[i];
int yy=y+j*diry[i];
if(0<=xx&&xx<=n&&0<=yy&&yy<n&&map[xx][yy]>map[x][y])
{
dp[x][y]=max(dp[x][y],dfs(xx,yy)+map[x][y]);
}
}
}
return dp[x][y];;
}
int main()
{
while(cin>>n>>k)
{
if(n==-1&&k==-1) break;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
cin>>map[i][j];
dp[i][j]=-1;
}
dfs(0,0);
cout<<dp[0][0]<<endl;
}
return 0;
}
hdu 1078 FatMouse and Cheese
最新推荐文章于 2019-04-25 16:17:40 发布