比赛 NOIP2008集训模拟4 评测结果 AAAAAAAAAA
题目名称 艾萨拉的激流 最终得分 100
用户昵称 zqzas 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-11-13 11:13:09
显示代码纯文本
#include <iostream>

#define MAXW 1010
#define INF 0x7fffffff

using namespace std;

int L,W,ans,data[3][MAXW],f[3][MAXW];

void dp(int st)
{
	int j;
	for (j=1;j<=W;j++)
	{
		if (f[st][j]==-INF)
			continue;
		f[st][j]=-INF;
		//1
		if (f[1-st][j]+data[st][j]>f[st][j] && f[1-st][j]>-INF)
			f[st][j]=f[1-st][j]+data[st][j];
		//2
		if (j-1>=1 && f[1-st][j-1]+data[st][j]>f[st][j] && f[1-st][j-1]>-INF)
			f[st][j]=f[1-st][j-1]+data[st][j];
		//3
		if (j+1<=W && f[1-st][j+1]+data[st][j]>f[st][j] && f[1-st][j+1]>-INF)
			f[st][j]=f[1-st][j+1]+data[st][j];
	}
}

void ini()
{
	int i,j,st=0;
	scanf("%d%d",&W,&L);
	//init
	for (j=1;j<=W;j++)
	{
		scanf("%d",&data[st][j]);
		if (data[st][j]==-1)
			f[st][j]=-INF;
		else
			f[st][j]=data[st][j];
	}
	for (i=2;i<=L;i++)
	{
		st=1-st;
		for (j=1;j<=W;j++)
		{
			scanf("%d",&data[st][j]);
			if (data[st][j]==-1)
				f[st][j]=-INF;
			else
				f[st][j]=0;
		}
		dp(st);
	}
	ans=-INF;
	for (j=1;j<=W;j++)
		if (f[st][j]>ans)
			ans=f[st][j];
}

int main()
{
	freopen("azshara.in","r",stdin);
	freopen("azshara.out","w",stdout);
	ini();
	printf("%d",ans);
	return 0;
}