只有40分
by 大耳朵图图 @ 2019-10-31 11:38:41
呀我没写注释
by 大耳朵图图 @ 2019-10-31 11:40:28
```cpp
#include<bits/stdc++.h>
using namespace std;
int max1(int a,int b,int c)//找出最大值并判断有没有使用过,没使用过就是0
{
if(a==b&&b==c&&a==c&&a==-65535)
return 0;
if ((a>b)&&(a>c)) return a;
if ((b>a)&&(b>c)) return b;
return c;
}
int main()
{
int m,n;
cin>>m>>n;
int a[m+2][n+2]={};
int f[m+2][n+2];
for(int i=0;i<=m+1;i++)
{
for(int j=0;j<=n+1;j++)
{
f[i][j]=-65535; //将输出初始化避免与测试数据重复
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int j=1;j<=n;j++)
f[1][j]=a[1][j];
for(int i=2;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
f[i][j]=max1(f[i-1][j-1],f[i-1][j],f[i-1][j+1])+a[i][j]; //dp
}
}
int ans=0;
for(int j=1;j<=n;j++)
ans=max(ans,f[m][j]);//输出最大值
cout<<ans;
return 0;
}
```
by 大耳朵图图 @ 2019-10-31 11:42:09
好像没考虑出发点的问题
by 冥诺在线发呆 @ 2019-10-31 11:43:02
对,出发点是 最后一行的中间的下方
只能在 f[n][m/2,m/2+1,m/2+2 ] 里更新
by CommonDataService @ 2019-10-31 13:21:20