当前位置:网站首页>HDU - 1078 FatMouse and Cheese(记忆化搜索DP)
HDU - 1078 FatMouse and Cheese(记忆化搜索DP)
2022-07-04 21:03:00 【WA_自动机】
HDU - 1078 FatMouse and Cheese
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
#include<iostream>
#include<cstring>
using namespace std;
const int N = 110;
const int dx[4]={
-1,0,1,0},dy[4]={
0,1,0,-1};
int g[N][N],ans[N][N];
int n,k;
int dfs(int x,int y)
{
if(ans[x][y]) return ans[x][y];
else
{
int sum=0;
for(int i=0;i<4;i++)
for(int j=1;j<=k;j++)
{
int xx=x+j*dx[i],yy=y+j*dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&g[xx][yy]>g[x][y])
sum=max(sum,dfs(xx,yy));
}
ans[x][y]=sum+g[x][y];
return ans[x][y];
}
}
int main()
{
while(cin>>n>>k)
{
if(n==-1&&k==-1) break;
memset(ans,0,sizeof ans);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>g[i][j];
cout<<dfs(1,1)<<endl;
}
return 0;
}
边栏推荐
- IIC (STM32)
- IIC (STM32)
- Application practice | Shuhai supply chain construction of data center based on Apache Doris
- Methods of improving machine vision system
- Maidong Internet won the bid of Beijing life insurance
- Use of redis publish subscription
- gtest从一无所知到熟练运用(1)gtest安装
- numpy vstack 和 column_stack
- How was MP3 born?
- 一文掌握数仓中auto analyze的使用
猜你喜欢
![[optimtool.unconstrained] unconstrained optimization toolbox](/img/ef/65379499df205c068ee9bc9df797ac.png)
[optimtool.unconstrained] unconstrained optimization toolbox

【C语言】符号的深度理解

超详细教程,一文入门Istio架构原理及实战应用

【公开课预告】:视频质量评价基础与实践

Redis 排查大 key 的3种方法,优化必备

Huawei ENSP simulator enables devices of multiple routers to access each other

Three or two things about the actual combat of OMS system

应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设

IIC (STM32)

【LeetCode】17、电话号码的字母组合
随机推荐
numpy vstack 和 column_stack
解析互联网时代的创客教育技术
Minidom module writes and parses XML
Learning breakout 3 - about energy
CAD中能显示打印不显示
A quick start to fastdfs takes you three minutes to upload and download files to the ECS
Cadeus has never stopped innovating. Decentralized edge rendering technology makes the metauniverse no longer far away
Rotary transformer string judgment
redis03——Redis的网络配置与心跳机制
旋变串判断
Daily question-leetcode556-next larger element iii-string-double pointer-next_ permutation
Go language loop statement (3 in Lesson 10)
【C語言】符號的深度理解
【C语言】符号的深度理解
Word文档中标题前面的黑点如何去掉
Redis transaction
How much is the minimum stock account opening commission? Is it safe to open an account online
哈希表(Hash Tabel)
输入的查询SQL语句,是如何执行的?
Redis 排查大 key 的3种方法,优化必备