poj1018 java_poj 1088

本来十分简单的一道题,可却花了我那么长时间。测试了各种数据都是对的,一提交就WA,郁闷死了!!!

后来才发现是search()函数中的temp[4]没有初始化。。。

改成 int temp[4]={0}后就AC了。。。。

244K

16MS

907B

解题思路:(DP)动态规划备忘录法递归求解。

dp[i][j]=1+max{dp[i+1][j],dp[i-1][j],dp[i][j+1],dp[i][j-1]};

避免重复,将计算过的dp[i][j]保存下来,下次直接查询而不再求解。

以下是源代码:

#include

int dp[101][101]={0};

int r[101][101]={0};

int main()

{

int search(int i,int j,int m,int n);

int m,n,i,j;

while(scanf("%d %d",&m,&n)!=EOF)

{

for(i=0;i

for(j=0;j

{

r[i][j]=0;//记得初始化

scanf("%d",&dp[i][j]);

}

int max=0,temp;

for(i=0;i

for(j=0;j

{

temp=search(i,j,m,n);//求以每个节点为起点的最长长度,然后求出整体最长长度

if(temp>max)

max=temp;

}

printf("%d\n",max);

}

return 1;

}

int search(int i,int j,int m,int n)//求以某个节点为起点的最长长度

{

if(r[i][j])//

return r[i][j];

int temp[4]={0};//这儿一定要初始化,否则就WA了

int max=0;

if(i+1

temp[0]=search(i+1,j,m,n);

if(i-1>=0&&dp[i-1][j]

temp[1]=search(i-1,j,m,n);

if(j+1

temp[2]=search(i,j+1,m,n);

if(j-1>=0&&dp[i][j-1]

temp[3]=search(i,j-1,m,n);

for(int k=0;k<4;k++)

if(temp[k]>max)//若temp不初始化为0,则这儿出错

max=temp[k];

r[i][j]=max+1;

return r[i][j];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值