比赛 |
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;
}