P1027 木瓜地
P1027 木瓜地
时间: 1000ms / 空间: 131072KiB / Java类名: Main
背景
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列的网格(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.
* 第2到R+1行: 第i+1行有C个空格隔开的整数,表示第i行的每个格的水果数。也就是F_i1,
F_i2, ..., F_iC.
输出格式
* 第一行: 一个单独的整数,表示到Bessie吃完右下角(R,C)的木瓜回到牛棚的时候為止,
一共在木瓜林吃掉了多少个木瓜。
一共在木瓜林吃掉了多少个木瓜。
测试样例1
输入
3 4
3 3 4 5
4 5 3 2
1 7 4 2
输出
39
备注
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) ---> (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扫
荡过了)。
搜索。
先定义两个数组表示上下左右的移动//Bessie可以从一个格沿著一条跟X轴或Y轴平行的直线走到邻接的令一个格
然后开始搜索当前格四周的最大值
边界的话就是最后一格结束
然后最后从搜索到的最大格继续往后找最大格不断搜索
没啦
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #define inf 0x7fffffff 6 using namespace std; 7 int r,c;//r hang c lie 8 int xx[5]={0,1,0,-1},yy[5]={1,0,-1,0};//xia you shang zuo 9 int a[45][45]; 10 int ans=0; 11 void dfs(int x,int y)//x hang y lie 12 { 13 ans+=a[x][y]; 14 if(x==r&&y==c)return ; 15 a[x][y]=-1; 16 int mxx=0,mxy=0; 17 for(int d=0;d<4;d++) 18 { 19 int dx=x+xx[d],dy=y+yy[d]; 20 if(a[dx][dy]>a[mxx][mxy]) 21 { 22 mxx=dx; 23 mxy=dy; 24 } 25 } 26 dfs(mxx,mxy); 27 } 28 29 int main() 30 { 31 cin>>r>>c; 32 for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)scanf("%d",&a[i][j]); 33 dfs(1,1); 34 cout<<ans; 35 puts(""); 36 return 0; 37 }
找过的格子别忘了标记一下QAQ
//为什么我总觉得这个题目的木瓜两个字充满恶意QAQ