权当抛砖引玉吧,掌握记搜的方法最重要。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,k;
bool book[21][21];
int cake[21][21];
int dp[21][21][21][21];
int yt(int x,int y,int w,int h)//返回蛋糕内樱桃值;x、y表示左上角坐标,w、h表示长和宽
{int yingtao=cake[x+w][y+h]-cake[x+w][y]-cake[x][y+h]+cake[x][y];return yingtao;
}
int dfs(int x,int y,int w,int h)//开成int类型
{   int ans=2147483647;if(dp[x][y][w][h]!=-1) return dp[x][y][w][h];//若x,y,w,h的状态已被搜过,则返回已经保存的结果if(yt(x,y,w,h)==1) return 0;//樱桃值为1时,代价为0(不用再切了)if(yt(x,y,w,h)==0) return 214748364;//樱桃值为0时,代价无穷大;但在实现时,INF不能大于INT_MAX/2for(int i=1;i<w;i++) ans=min(ans,dfs(x,y,i,h)+dfs(x+i,y,w-i,h)+h);//枚举各行for(int i=1;i<h;i++) ans=min(ans,dfs(x,y,w,i)+dfs(x,y+i,w,h-i)+w);//枚举各列dp[x][y][w][h]=ans;//保存结果return ans;
}
int main()
{memset(dp,-1,sizeof(dp));//初始化scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=k;i++){int x,y;scanf("%d%d",&x,&y);book[x][y]=1;}for(int i=1;i<=n;i++){//前缀和for(int j=1;j<=m;j++){cake[i][j]=cake[i-1][j]+cake[i][j-1]-cake[i-1][j-1];if(book[i][j]) cake[i][j]++;}}int ans=dfs(0,0,n,m);printf("%d",ans);return 0;
}

记忆化搜索,其实就是动态规划(DP)与搜索的完美结合,提高了搜索的效率,也提供了DP的道路。

所谓动态规划,就是动态的规划,其本质就是“状态转移”——从一种情况直接或间接推出其他情况。对于本题而言,就是要想清楚如何得到最小代价,是由哪几部分组成。

so本题具体操作如下:

定义一四维数组dp,存储在x,y,w,h的状态下的最小代价。

定义一int类型函数dfs,其返回值即为代价。若蛋糕已有解,则直接返回现有代价。否则若当前蛋糕内樱桃值为1,返回代价为0。若当前蛋糕内樱桃值为0,返回代价为“无穷大”。否则继续枚举可供下刀的行和列,继续对两侧进行搜索,打擂台寻找最小代价。遍历完所有情况后,保存当前结果并返回上一层。

小结:记忆化搜索与暴搜的最大区别在于,前者对搜索进行了优化,对当前结果进行了记录,避免了重复搜索。

转载于:https://www.cnblogs.com/dong-ji-yuan/p/9845264.html

【课后服务】20181022切蛋糕相关推荐

  1. 减负提质的新命题下,网易云信如何为课后服务升级?

    " ● 给你报了补习班,以后每周末都得上课哦. ● 同学们,学校里不要追逐打闹,注意安全! ● 放学后晚点来接你,先在教室里做作业吧. 经历过学生时代的我们,或多或少都听到过类似的熟悉话语. ...

  2. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——A题 切蛋糕

    题目描述 龙龙有一块蛋糕,现在他想将蛋糕平均切成k块,分给他的k名hxd.但是不幸的是,因为龙龙不擅长切蛋糕,他每一次只能将一块蛋糕平均分成两份.例如,将一块大小为1的蛋糕分割成两块大小为1/2的蛋糕 ...

  3. 漫画:有趣的 “切蛋糕“ 问题

    -----  第二天  ----- 举个例子: 我们有5块蛋糕, 蛋糕的大小分别是 5,17,25,3,15 我们有7位顾客, 他们的饭量分别是 2,5,7,9,12,14,20 (每个蛋糕大小和顾客 ...

  4. AI在中国,还没到抢切蛋糕的时候

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 他们中的不少名字,之前并不广为人知. 刘全全.王宇杰.王昌宝.帅靖文.张顺丰.蒋尚达.余革年.闵可锐.宋洪伟.李晓普.张晓伟.王峰.董倩倩 ...

  5. P1714 切蛋糕(线段树+前缀和)

    P1714 切蛋糕 解题思路:求连续区间不超过k的最大值.先求出前缀和,线段树维护前缀和,在一个长度为k的区间,找到前缀和最小的,用最后的值减去这个值,得到的就是在这个区间里的最大值.如果长度不能到达 ...

  6. 切蛋糕(洛谷P1714)

    切蛋糕 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大, ...

  7. c语言切蛋糕问题算法,从“切蛋糕问题”谈到欧拉#

    从"切蛋糕问题"谈到欧拉在图论上的贡献 这个作者敬业,不得不发... 从圣诞节到新年之间,我们有几天假期.我们几个老朋友就选择一个晚上,各自准备点吃的东西欢聚在一起.吃吃喝喝完后, ...

  8. 【Leetcode单调队列】- 洛谷P1714切蛋糕

    单调队列 解决该类问题的重点维护一个队列,从队首到队尾是递减的,队首是最大的.队尾是最小的. 队尾接受值,队首排出值. Java实现用双端队列,前面接收值,后面排出来值. 这类题目往往是跟滑动窗口一起 ...

  9. 切蛋糕 爱丽丝梦游仙境,来到了疯帽子的茶会。茶会上有n只兔子,疯帽子作为绅士,今天专门为爱丽丝和兔子们准备了一个圆形的慕斯蛋糕,疯帽子要把这块蛋糕平均分给爱丽丝和兔子们(疯帽子自己不吃蛋糕)

    Description 爱丽丝梦游仙境,来到了疯帽子的茶会.茶会上有n只兔子,疯帽子作为绅士,今天专门为爱丽丝和兔子们准备了一个圆形的慕斯蛋糕,疯帽子要把这块蛋糕平均分给爱丽丝和兔子们(疯帽子自己不吃 ...

最新文章

  1. python免费入门手册-python基础入门手册。。。。。。
  2. linux 设备文件分区命令,Linux常见设备及相应/dev/xxx文件名、Mount Point、挂载点、Mount命令、fstab、挂载分区(示例代码)...
  3. BZOJ2683 简单题(CDQ分治)
  4. C++中的定位放置new(placement new)
  5. (爱加密系列教程十二) 如何防止jd-gui查看代码
  6. Cookie 和 Session机制具体解释
  7. Linux环境安装ghostscript-9.25
  8. linux 定时器 库,linux 定时器
  9. PS零基础入门系列-PS图层样式案例实用技巧
  10. 自学WEB开发第一天:工欲善其事,必先利其器。基于VB语言,纠结于VS和VS code之间
  11. markdown基础语法
  12. VMvare虚拟机删除快照时卡住的解决办法
  13. C51汇编实现时间控制器+proteus仿真
  14. 产业分析:二次元产业研究报告
  15. 【Nature 子刊】I型HLA基因中和癌症相关的体细胞突变--转载
  16. uniapp展示富文本
  17. google android 市场份额,谷歌公布安卓系统市场占有率份额 碎片化依然严重
  18. 使用Delphi进行相机访问
  19. Python自动登陆淘宝并爬取商品数据
  20. bindService()流程源码分析

热门文章

  1. java方法区对象类型_浅谈Java内存区域与对象创建过程
  2. SQL2008R2的 遍历所有表更新统计信息 和 索引重建
  3. 从0开始学习 GitHub 系列之「03.Git 速成」
  4. 程序日志--要养成好习惯
  5. MAC终端安装grunt--javascript世界得构建工具
  6. php字符串学习笔记
  7. Linux文件读写改权限详解
  8. python 波形发生_事件与信号
  9. 安卓APP_ 控件(11)webView —— 简单应用:显示网页
  10. python 定义method_python进阶14:实例方法和类方法、types.MethodType()