2016搜索提高1003
来源:互联网 发布:舒尔特注意力训练软件 编辑:程序博客网 时间:2024/05/18 00:48
FatMouse and Cheese
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 73 Accepted Submission(s) : 40
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
FatMouse begins by standing at location (0,0). He eats up the cheese where he stands and then runs either horizontally or vertically to another location. The problem is that there is a super Cat named Top Killer sitting near his hole, so each time he can run at most k locations to get into the hole before being caught by Top Killer. What is worse -- after eating up the cheese at one location, FatMouse gets fatter. So in order to gain enough energy for his next run, he has to run to a location which have more blocks of cheese than those that were at the current hole.
Given n, k, and the number of blocks of cheese at each grid location, compute the maximum amount of cheese FatMouse can eat before being unable to move.
Input
a line containing two integers between 1 and 100: n and k
n lines, each with n numbers: the first line contains the number of blocks of cheese at locations (0,0) (0,1) ... (0,n-1); the next line contains the number of blocks of cheese at locations (1,0), (1,1), ... (1,n-1), and so on.
The input ends with a pair of -1's.
Output
Sample Input
3 11 2 510 11 612 12 7-1 -1
Sample Output
37
思路:直接用一个数组来记录每条路径所能吃到的奶酪,然后比较一下,求出最大值即可。
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <queue>
using namespace std;
int n,k;
int map[105][105];
int a[105][105];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int check(int x,int y)
{
if(x<0||y<0||x>=n||y>=n)
return 0;
return 1;
}
int dfs(int x,int y)
{
int max=0;
int sum=0;
if(a[x][y]==0)
{
int i,j;
for(i=1;i<=k;i++)
for(j=0;j<4;j++)
{
int xx=x+dir[j][0]*i;
int yy=y+dir[j][1]*i;
if(check(xx,yy)&&map[xx][yy]>map[x][y])
{
sum=dfs(xx,yy);
if(sum>max)
max=sum;
}
a[x][y]=max+map[x][y];
}
}
return a[x][y];
}
int main()
{
while(scanf("%d %d",&n,&k))
{
if(n==-1&&k==-1)break;
else
{
int i,j;
int e;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
}
memset(a,0,sizeof(a));
e=dfs(0,0);
printf("%d\n",e);
}
}
return 0;
}
- 2016搜索提高1003
- 2016搜索提高1017
- 2016搜索提高1010
- 2016搜索提高1008
- 2016搜索提高1001
- 2016搜索提高1004
- 提高搜索性能方式
- nutch 提高搜索精度
- nutch 提高搜索精度
- 提高solr的搜索速度
- 提高coreseek的搜索精度
- 提高solr的搜索速度
- Search Algorithm-搜索提高专题
- Android提高 - 浮动搜索框
- 颠倒关键词顺序提高网页搜索质量
- 如何提高和优化Lucene搜索速度
- 自定义评分器Similarity,提高搜索体验
- 自定义评分器Similarity,提高搜索体验
- 静态转换和动态转换
- bzoj4881: [Lydsy2017年5月月赛]线段游戏
- Linux 下安装codeblocks的笔记:
- R-CNN阅读笔记
- LeetCode| ZigZag Conversion
- 2016搜索提高1003
- POJ 3067 Japan 树状数组
- pg_regress 使用技巧
- Android_Activity生命周期全解
- JavaScript省市二级联动
- 代码片段-Thymeleaf常见用法(六)
- Hadoop大数据平台入门——HDFS和MapReduce
- web.右键菜单.随笔
- C++:向上转型