#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
using namespace std;
typedef long long LL;
const int M = 10000;
const int INF = 0x3f3f3f3f;
int n, k;
int dir[][2] = { 1,0,-1,0,0,1,0,-1 };
int dp[105][105];
int ans;
int mp[105][105];
bool vis[105][105];
int dfs(int x, int y)
{
int res = 0;
int sum = 0;
if (!vis[x][y])
{
vis[x][y] = 1;
//dp[x][y] += mp[x][y];
for (int i = 1; i <= k; ++i) //最多走K步
{
for (int j = 0; j < 4; ++j) //每个方向i步 遍历
{
int xx = x + dir[j][0] * i;
int yy = y + dir[j][1] * i;
if (xx < 0 || xx >= n || yy < 0 || yy >= n)
{
continue;
}
if (mp[xx][yy] > mp[x][y])
{
sum = dfs(xx, yy);
}
res = max(res, sum); //在当前(x,y)开始 所能走出的最大值
}
}
dp[x][y] = res + mp[x][y];
}
return dp[x][y];
}
int main()
{
while (~scanf("%d%d", &n, &k) && (n + k != -2))
{
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
scanf("%d", &mp[i][j]);
}
}
memset(dp, 0, sizeof(dp));
memset(vis, 0, sizeof(vis));
cout << dfs(0,0) << endl;
}
return 0;
}

本文详细介绍了使用C++实现动态规划算法解决最远路径问题的方法,包括算法原理、代码实现和复杂度分析。

被折叠的 条评论
为什么被折叠?



