这个题目模仿了上一篇博客的三角形,但是答案不对,不是同一种题型,但是大相径庭,
然后今天积累到了一点,动态规划的话,输入和操作循环数最好都从1开始,要不然可能会出想不到的错误,,我也是醉了反正不改我过不不去
范围我也限制好了呀,可能还有什么细节没注意到吧,然后还有就是如果在nyoj上runtimeerror了,把cin,cout改成scanf,printf可能能过,我就是这么过了笑哭
代码逻辑的话就是模拟他走的路线,从上到下(和三角形那题不一样),每一次走的时候数组里加上走两个方向走中最大的值,最后输出最后一个数即dp[n][m]即可
然后
代码逻辑借鉴了一手下面这个博客博主的思路,么办法,三角形的思路不行就慌了,搜索也出了些问题,还是基本功不扎实啊
链接如下
http://blog.csdn.net/whjkm/article/details/38761639
ac代码如下
#include <cstdio>
#include <algorithm>
#include <memory.h>
#define N 21
using namespace std;
int n,m;
int dp[N][N];
int main()
{
memset(dp,0,sizeof(dp));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&dp[i][j]);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]+=max(dp[i-1][j],dp[i][j-1]);
}
}
printf("%d",dp[n][m]);
return 0;
}