博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1078
阅读量:6140 次
发布时间:2019-06-21

本文共 2733 字,大约阅读时间需要 9 分钟。

Problem Description
FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 <= p < n and 0 <= q < n. At each grid location Fatmouse has hid between 0 and 100 blocks of cheese in a hole. Now he's going to enjoy his favorite food.
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
There are several test cases. Each test case consists of
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
For each test case output in a line the single integer giving the number of blocks of cheese collected.
 

 

Sample Input
3 1 1 2 5 10 11 6 12 12 7 -1 -1
 

 

Sample Output
37

思路:
特别记得还在大一下学期军训(5月份)的时候,第一次接触到dfs和bfs的相关题目,当时做了用了好长时间才勉强能做出几道,现在这个题看了下题解基本就掌握套路了
对于老鼠所到达的每个位置,它下一步可能到达的位置有上下左右4个方向分别走w(1=<w<=k)步,方向用t数组来记录

#include 
#include
#include
using namespace std;int n,k;int map[107][107];int dp[107][107];int t[4][2]={
1,0,-1,0,0,-1,0,1};int max(int a,int b) { return a>b?a:b;}int dfs(int x,int y){ int maxn = 0; int ans; if(dp[x][y] != -1) return dp[x][y]; else { for(int i = 1;i <= k;i++) for(int j = 0;j < 4;j++) { int new_x = x+t[j][0]*i; int new_y = y+t[j][1]*i; if(new_x>=0&&new_x
=0&&new_y
map[x][y]) { ans = dfs(new_x,new_y); maxn = max(ans,maxn); } } return dp[x][y] = maxn+map[x][y]; }}int main(){ while(scanf("%d%d",&n,&k)) { if(n==-1 && k==-1) break; for(int i = 0;i < n;i++) for(int j = 0;j

转载于:https://www.cnblogs.com/immortal-worm/p/4971411.html

你可能感兴趣的文章
Leaflet-Develop-Guide
查看>>
每隔1s打印0-5
查看>>
Angular6错误 Service: No provider for Renderer2
查看>>
聊聊flink的BlobStoreService
查看>>
洗牌算法具体指的是什么?
查看>>
HBuilder打包手机app的方法
查看>>
解决Mac下SSH闲时自动中断的问题
查看>>
在JavaScript中理解策略模式
查看>>
ArchSummit 深圳 2017 成功举办,探索未来互联网架构
查看>>
不知道如何提升深度学习性能?我们为你整理了这份速查清单
查看>>
Go 2提上日程,官方团队呼吁社区给新特性提案提交反馈
查看>>
技术绩效考量:你们可能都做错了
查看>>
“亲切照料”下的领域驱动设计
查看>>
除了输入法,移动端AI还有哪些想象空间?
查看>>
回家路上想起来关于Js一个有趣的东西
查看>>
B端大数据应用的架构实践与思考
查看>>
2019 SRE 调查报告:事故处理是主要工作,SRE 压力山大
查看>>
React创建组件的三种方式及其区别
查看>>
大中型企业的天网:Apache Geode
查看>>
Windows Server已可安装Docker,Azure开始支持Mesosphere
查看>>