题意:有一个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-(记忆化搜索)相关推荐

  1. HDU 1078 FatMouse and Cheese【记忆化搜索】

    <题目链接> 题目大意: 给你一个n*n的矩阵,每个矩阵上有相应数量的奶酪,老鼠一次最多走K步,且每次只能横着走或者竖着走,并且每一次停留位置上的奶酪数一定要多余它刚才的奶酪数,求这只老鼠 ...

  2. hdu 1078 FatMouse and Cheese(记忆化搜索)

    题意:一个n*n的矩阵,每个点有若干块点心,小老鼠开始在左上角,每次最多往前走k步,且停留的点的点心数比上一次停留的点大,输出最大的i点心数 分析:停留的点数目必须比上次大,形成一个序,必定是一个DA ...

  3. 【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 ...

  4. HDU - 1078 FatMouse and Cheese

    再谈记忆化搜索 题目描述: FatMouse has stored some cheese in a city. The city can be considered as a square grid ...

  5. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  6. Palindrome subsequence HDU - 4632 区间dp|记忆化搜索

    // 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...

  7. 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]

    题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...

  8. BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】

    题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  9. 数位dp 记忆化搜索java_hdu 5787 数位dp,记忆化搜索

    题意:求区间[l,r]内有多少个数符合,这个数的任意的相邻k位数(digits),这k个数都两两不相等 l,r范围是1~1e18,k是2~5 思路:数位DP,因为K<=5,我们最多需要保存下来当 ...

  10. pku 1191 棋盘分割 DP / 记忆化搜索

    http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2]  = min(d ...

最新文章

  1. 大数据-spark-hbase-hive等学习视频资料
  2. 基础理论:啥是分布函数CDF、啥叫联合分布?
  3. VTK:隐式函数之ImplicitDataSet
  4. The mook jong 计数DP
  5. 【Redis】有序集合的交集与并集
  6. c++矩阵连乘的动态规划算法并输出_「Javascript算法设计」× 动态规划与回溯算法...
  7. python第五章上机实践报告_第五章实践报告 - osc_kk5bjg1i的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. docker删除所有镜像和容器
  9. mac电脑如何与手机同步复制粘贴_如何将电脑里的文件同步到手机里?
  10. (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...
  11. SAP打印出库单需求
  12. python基础--字典
  13. java se win10_Win10 JAVASE的下载和环境变量设置
  14. 电脑网页长截图怎么弄的?电脑上怎么截图?
  15. 使用共享文件夹实现上位机和下位机的信息传输
  16. 微信H5开发缓存问题解决
  17. Django的了解及应用途径
  18. 谷歌2018年IO大会
  19. 网络控制播放器(局域网内通过TCP和UDP控制视频播放器)
  20. AcWing - 高斯消元解线性方程组(高斯消元)

热门文章

  1. C#中 As 和强制转换的总结
  2. 用Javascript实现Repeater
  3. 优秀的应用快速启动工具:start for Mac完美支持m1
  4. 苹果Mac分享几个爱用音乐播放器
  5. setContentView是如何把布局加上去的
  6. 关于iOS13 的一些适配
  7. 考研复习计划怎么做?MindManager来帮你!
  8. 为什么最好不用SSL免费证书? 免费ssl证书有什么不好?
  9. springmvc集成shiro例子
  10. diy操作系统 0:万事开头难