不要使用memset初始化二维数组
by xiangling @ 2018-07-20 07:34:09
您可以参考下我的记忆化搜索程序
```
#include<bits/stdc++.h>
#define MAXN 205
#define INF 1199999999
using namespace std;
int m,n;
int f[MAXN][MAXN],w[MAXN][MAXN];
int dp(int x,int y)
{
if(f[x][y]!=(-INF))return f[x][y];
if(x==1) return w[x][y];
if(y<1||y>n)return (-INF);
f[x][y]=max(max(dp(x-1,y),dp(x-1,y-1)),dp(x-1,y+1))+w[x][y];
return f[x][y];
}
int main()
{
for(int i=0;i<MAXN;i++)
for(int j=0;j<MAXN;j++)
f[i][j]=-INF;
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&w[i][j]);
cout<<dp(m+1,n/2+1);
return 0;
}
```
by xiangling @ 2018-07-20 07:36:35
@[Preccc_LHW](/space/show?uid=24374) 别赋-1,有些吃出来是负数你用-1不够的,建议memset(f,129,sizeof(f));再来一个全局变量p记录原值,比如p=f[0][0],然后上面!=-1改成!=p就ok了,这和memset初始化多维数组无关
by hahaha_s @ 2018-07-20 07:49:43
@[Preccc_LHW](/space/show?uid=24374) 吃出来是负数也得吃,吃货的精神啊~~
by hahaha_s @ 2018-07-20 07:50:37
@[rainman](/space/show?uid=55804) @[hahaha_s](/space/show?uid=36479)
感谢大佬帮助!!
把初值赋为-1确实有错,
但因数据水不影响结果,
90分的原因是
```c
if (ty > m || ty <= 0)continue;
```
中的n,应该是m~~(哭着找了好久)~~
15分钟写的代码花了半个小时找错,你说我是不是睿(ruo)智啊
by Preccc_LHW @ 2018-07-21 00:59:47
@[Preccc_LHW](/space/show?uid=24374) 然而你打的不就是m吗。。
by hahaha_s @ 2018-07-21 07:19:08
@[Preccc_LHW](/space/show?uid=24374) 数据水这句话成功打肿了我的脸。。
by hahaha_s @ 2018-07-21 07:27:10
@[hahaha_s](/space/show?uid=36479) 不,应该是n,不是m,
回复写反了,不要在意这些细节。。
by Preccc_LHW @ 2018-07-22 00:04:01
@[Preccc_LHW](/space/show?uid=24374) 噗嗤额
by hahaha_s @ 2018-07-22 17:23:38