!HDU 1078 FatMouse and Cheese-dp-(记忆化搜索)
题意:有一个n*n的格子。每一个格子里有不同数量的食物,老鼠从(0,0)開始走。每次下一步仅仅能走到比当前格子食物多的格子。有水平和垂直四个方向,每一步最多走k格,求老鼠能吃到的最多的食物。
分析:
矩阵上求最大子路线和,可是不像一维的最大子序列那么easy,由于二维的确定不了计算顺序。
既然不能确定计算顺序,那么就能够利用dp记忆化搜索,这个正好不用管计算顺序;
dp记忆化搜索的思想:递归,然后通过记录状态dp[i][j]是否已经计算过来保证每一个状态仅仅计算一次避免反复计算。若计算过则返回dp[i][j],否则计算dp[i][j],直到全部状态都计算过。
大体框架是这种:
memset(dp,0,sizeof(dp));
int DP(int x,int y)
{
if(dp[x][y]) return dp[x][y];
计算dp[i][j];(这当中包含一些条件推断等)
}
递归函数怎么写是重点和难点,以后多注意积累和理解。
代码:
#include<iostream>
#define max(a,b) a>b?a:b
using namespace std;
int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,k,a[200][200];
int dp[200][200];
int dfs(int x,int y)
{if(!dp[x][y]){int mx=0,sum;for(int i=1;i<=k;i++){for(int j=0;j<4;j++){int dx=x+d[j][0]*i;int dy=y+d[j][1]*i;if(dx>=0&&dx<n&&dy>=0&&dy<n&&a[dx][dy]>a[x][y]){sum=dfs(dx,dy);mx=max(sum,mx);}}}dp[x][y]=a[x][y]+mx;}return dp[x][y];
}
int main()
{while(cin>>n>>k){if(n==-1&&k==-1) break;for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j];memset(dp,0,sizeof(dp));int ans=dfs(0,0);cout<<ans<<endl;}
}
!HDU 1078 FatMouse and Cheese-dp-(记忆化搜索)相关推荐
- HDU 1078 FatMouse and Cheese【记忆化搜索】
<题目链接> 题目大意: 给你一个n*n的矩阵,每个矩阵上有相应数量的奶酪,老鼠一次最多走K步,且每次只能横着走或者竖着走,并且每一次停留位置上的奶酪数一定要多余它刚才的奶酪数,求这只老鼠 ...
- hdu 1078 FatMouse and Cheese(记忆化搜索)
题意:一个n*n的矩阵,每个点有若干块点心,小老鼠开始在左上角,每次最多往前走k步,且停留的点的点心数比上一次停留的点大,输出最大的i点心数 分析:停留的点数目必须比上次大,形成一个序,必定是一个DA ...
- 【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)
题干: FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimens ...
- HDU - 1078 FatMouse and Cheese
再谈记忆化搜索 题目描述: FatMouse has stored some cheese in a city. The city can be considered as a square grid ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- Palindrome subsequence HDU - 4632 区间dp|记忆化搜索
// 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...
- 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]
题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...
- BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- 数位dp 记忆化搜索java_hdu 5787 数位dp,记忆化搜索
题意:求区间[l,r]内有多少个数符合,这个数的任意的相邻k位数(digits),这k个数都两两不相等 l,r范围是1~1e18,k是2~5 思路:数位DP,因为K<=5,我们最多需要保存下来当 ...
- pku 1191 棋盘分割 DP / 记忆化搜索
http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2] = min(d ...
最新文章
- 大数据-spark-hbase-hive等学习视频资料
- 基础理论:啥是分布函数CDF、啥叫联合分布?
- VTK:隐式函数之ImplicitDataSet
- The mook jong 计数DP
- 【Redis】有序集合的交集与并集
- c++矩阵连乘的动态规划算法并输出_「Javascript算法设计」× 动态规划与回溯算法...
- python第五章上机实践报告_第五章实践报告 - osc_kk5bjg1i的个人空间 - OSCHINA - 中文开源技术交流社区...
- docker删除所有镜像和容器
- mac电脑如何与手机同步复制粘贴_如何将电脑里的文件同步到手机里?
- (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...
- SAP打印出库单需求
- python基础--字典
- java se win10_Win10 JAVASE的下载和环境变量设置
- 电脑网页长截图怎么弄的?电脑上怎么截图?
- 使用共享文件夹实现上位机和下位机的信息传输
- 微信H5开发缓存问题解决
- Django的了解及应用途径
- 谷歌2018年IO大会
- 网络控制播放器(局域网内通过TCP和UDP控制视频播放器)
- AcWing - 高斯消元解线性方程组(高斯消元)