方格取数 (block.c/cpp/pas)

方格取数 (block.c/cpp/pas)

【问题描述】
fateice有一张n×m的藏宝图,每个格子都有一定数量的黄金;当然也有一些格子是陷阱。为了应对许多探险者,fateice制定了一些规则:
可以从第一列的任意位置开始,可以选择在第m列的任意位置结束挑战。
每次可以向右、向上或向下走一格,取走走过的格子的黄金;
当然,不能走入陷阱里,每个格子最多走一次。
fateice为了使得探险更有乐趣,在地图的上下边界设置了“传送器”:当你在第n行时,往下走将会被传送器传送至同一列的第1行;当你在第1行时,往上走将会被传送器传送至同一列的第n行。由于传送器“劫富济贫”,所以每次传送的费用为当前探险者身上所有黄金。
fjzzq2002要挑战这个藏宝图,并带走尽可能多的黄金。由于fjzzq2002去NOI捧杯了,所以你需要帮他解决这个问题。
【输入格式】
输入文件名为block.in。
一个测试点有多组数据,对于每组数据:
第一行,两个数,n,m,表示fateice的藏宝图的大小。
接下来n行,每行m个数,描述藏宝图:当一个数为-1时,表示这个格子为陷阱,无法通过;非陷阱的格子中的数均为非负整数。
【输出格式】
输出文件名为block.out。
如果fjzzq2002可以完成挑战,输出最多能带走多少黄金;否则,输出-1.
【输入输出样例1】
见选手目录下的block/block1.in和block/block1.out
block1.in

4 4
-1 4 5 1
2 -1 2 4
3 3 -1 -1
4 2 1 2
block1.out
16
【输入输出样例2】
见选手目录下的block/block2.in和block/block2.out。
该输入输出样例对应测试点7-10的数据规模。
【输入输出样例3】
见选手目录下的block/block3.in和block/block3.out。
该输入输出样例对应测试点13-14的数据规模。
【输入输出样例1说明】
一条最优路线:(3,1)→(4,1)→(4,2)→(1,2)→(1,3)→(2,3)→(2,4)→(1,4);其中使用了一次传送器,之前所有取得的黄金清零,故最后可以取得黄金的数量为5+2+4+1+4=16。

信息

难度
9
分类
(无)
标签
递交数
4
已通过
2
通过率
50%
被复制
1
上传者