dp 问题,不过要注意开始的时候下表要考虑好,我是让d[][] 的四周空出一行,这样就不会出错了
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
int N, M;
int map[25][25], d[25][25];
int dp(int N, int M)
{
memset(d, 0, sizeof(d));
for(int i=0; i<=N; i++)
for(int j=0; j<=M; j++)
if(d[i+1][j]>d[i][j+1])
d[i+1][j+1] = d[i+1][j] + map[i+1][j+1];
else d[i+1][j+1] = d[i][j+1] + map[i+1][j+1];
return d[N][M];
}
int main()
{
scanf("%d %d",&N, &M);
for(int i=1; i<=N; i++)
for(int j=1; j<=M; j++)
cin>>map[i][j];
int t = dp(N,M);
printf("%d\n",t);
system("pause");
return 0;
}
本文介绍了一个基于动态规划的寻路算法实现。通过二维数组记录地图信息,并使用动态规划方法求解从起点到终点的最大权值路径。代码中详细展示了如何初始化数组、进行状态转移以及输出最终结果。
7562

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



