题目限制
时间限制 | 内存限制 | 评测方式 | 题目来源 |
1000ms | 131072KiB | 标准比较器 | Local |
题目背景
USACO OCT09 4TH
题目描述
Bessie不小心游荡出Farmer John的田地,而走进了相邻的农民的地。她举起一个木瓜,木
瓜对奶牛来说可是不可多得得美味。这个木瓜林像一般的威斯康星州的田地一样被分割成一个
R行C列的网格(1 <= R <= 40, 1 <= C <= 40)。Bessie可以从一个格沿著一条跟X轴或
Y轴平行的直线走到邻接的令一个格。Bessie发现一开始她自己在木瓜林的(1,1),也就是第
一行第一列慢悠悠地咀嚼著木瓜。
Bessie总是用她最信赖地双筒望远镜去数每一个邻接的格的低掛著的木瓜的数目。然后她就游
荡到那个有最多没有被吃掉的木瓜的邻接的格子(保证这洋的格子只有一个)。
按照这种移动方法,最终Bessie总是会在(R,C)停止然后吃掉那裡的木瓜。
给定这个木瓜林的大小及每个格的木瓜数F_ij(1 <= F_ij <= 100), 要求Bessie一共吃了
多少个木瓜。
输入格式
第一行: 两个空格隔开的整数R和C.
第2到R+1行: 第i+1行有C个空格隔开的整数,表示第i行的每个格的水果数。也就是F_i1,
F_i2, ..., F_iC.
输出格式
* 第一行: 一个单独的整数,表示到Bessie吃完右下角(R,C)的木瓜回到牛棚的时候為止,
一共在木瓜林吃掉了多少个木瓜。
提示
Bessie按照下图数字旁边的字母的顺序吃掉木瓜。
(1,1) ---> (1,C)
(1,1) 3a 3 4g 5h (1,C)
| 4b 5c 3f 2i |
(R,1) 1 7d 4e 2j (R,C)
(R,1) ---> (R,C)
她吃了39个木瓜,剩下4个没有吃(也就是说除了2个格幸免於难,剩下的格子都被Bessie扫
荡过了)。
样例数据
输入样例 #1 | 输出样例 #1 |
---|---|
3 4 3 3 4 5 4 5 3 2 1 7 4 2 | 39 |
从(1,1)开始搜索,每次走相邻的最大值,走过的格子赋值为-1
大牛代码:
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 1000000000
#define ll long long
using namespace std;
int a[45][45];
int r,c,ans;
int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};
void dfs(int x,int y)
{
ans+=a[x][y];
if(x==r&&y==c)return;
a[x][y]=-1;
int mxx=0,mxy=0;
for(int d=0;d<4;d++)
{
int dx=x+xx[d],dy=y+yy[d];
if(dx<1||dy<1||dx>r||dy>c)continue;
if(a[dx][dy]>a[mxx][mxy])
mxx=dx,mxy=dy;
}
dfs(mxx,mxy);
}
int main()
{
scanf("%d%d",&r,&c);
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
scanf("%d",&a[i][j]);
dfs(1,1);
printf("%d\n",ans);
return 0;
}