hdu1078(dp+dfs)
来源:互联网 发布:枕头什么牌子好 知乎 编辑:程序博客网 时间:2024/05/22 10:55
FatMouse and Cheese
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9586 Accepted Submission(s): 4039
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.
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.
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 11 2 510 11 612 12 7-1 -1
Sample Output
37
Source
Zhejiang University Training Contest 2001
Recommend
We have carefully selected several similar problems for you: 1080 1074 1025 1158 1227
挺麻烦的一道dfs 拿到手不难看出是一道搜索题 但是!没有条件!那跟枚举有啥区别,所以1s肯定会超时。。。只能加个DP了。加了DP也不好写,卡顿了好久,好不容易测试没问题了交了下还是超时。。。无奈之下看了别人的题解 只要加上if(dp[x][y]) return dp[x][y];就不会超时了,还是太年轻 值得纪念的一道好题。。。
#include<bits/stdc++.h>using namespace std;int n,k;int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int mp[1000][1000];int ans=0;int dp[1000][1000];int dfs(int x,int y){if(dp[x][y]) return dp[x][y]; //没有记忆化是会超时的 关键! int sum=0;for(int i=0;i<4;i++){for(int j=1;j<=k;j++){int x1=x+j*dir[i][0];int y1=y+j*dir[i][1];if(x1>=n||y1>=n||x1<0||y1<0) break;else if(mp[x1][y1]>mp[x][y]){sum=max(sum,dfs(x1,y1));}}} return dp[x][y]=sum+mp[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<n;j++) scanf("%d",&mp[i][j]); memset(dp,0,sizeof(dp)); cout<<dfs(0,0)<<endl;}}
0 0
- HDU1078(树形DP+DFS)
- HDU1078 dfs+dp
- hdu1078(dp+dfs)
- HDU1078 记忆化DFS+dp
- HDU1078:记忆搜索(dp+dfs)
- HDU1078 FatMouse and Cheese(DFS+DP)
- hdu1078 FatMouse and Cheese 搜索dfs&dp
- HDU1078(深搜+DP)
- hdu1078基础dp
- hdu1078
- hdu1078
- hdu1078
- HDU1078
- HDU1078
- hdu1078
- HDU1078
- hdu1078 zoj1107(记忆化搜索/DP)
- HDU1078 FatMouse and Cheese(DP&非DP)
- 编写一个程序,将浮点数转换成人名币读法字符串(学习记录)
- Qt动态库和静态库的加载及使用
- 转载的哦。一位资深程序员大牛给予Java初学者的学习建议
- A
- maven入门4-与eclipse整合
- hdu1078(dp+dfs)
- DS1302+AT24C02+按键数码管显示程序 (原创)
- events.js:160 throw er; // Unhandled 'error' event ^ Error: write after end at Serv
- select取值
- Spring 核心技术——AOP 简介
- 操作系统常见面试题(二)
- Rxjava Subject分析
- iOS——UITabBarController
- Android中的Context详解