【课后服务】20181022切蛋糕

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

#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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我也来记录我的一些开发心得和笔记!

博客园&#xff0c;我来了&#xff01; 转载于:https://www.cnblogs.com/rose2007/archive/2007/07/11/814435.html

经典vim插件功能说明、安装方法和使用方法介绍(已更新)

1 # 2 转载请注明出处: http://blog.csdn.net/tge7618291 http://nuoerlz.is-programmer.com 8 # 9 1. 查看 key 相关信息说明的命令 :help keycodes 10 11 # 12 2. ctags 13 (1). 帮助手册查看 14 :help usr_29 15 16 (2). 功能 17 ctags的功能, 只要在unix/lin…

【哈利波特】Sherbert Lemon对HP的解读之11

NINEScar FaceThe characteristics of Harry’s scar change considerably.PS/SS – BurningQUOTEHarry, who was starting to feel warm and sleepy, looked up at the High Table again. Hagrid was drinking deeply from his goblet. Professor McGonagall was talking to P…

Linux 下, npm i 老是被killed 已杀死

2019独角兽企业重金招聘Python工程师标准>>> node&#xff1a;v8.12.0 npm v6.4.1 npm i 安装到一半会报这样到错误&#xff0c;并终止&#xff1a; npm WARN deprecated socks1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious …

(转)创建X509证书,并获取证书密钥的一点研究

创建X509证书&#xff0c;并获取证书密钥的一点研究 作者&#xff1a;肖波 个人博客&#xff1a;http://blog.csdn.net/eaglet ; http://www.cnblogs.com/eaglet 2007/7 南京 背景 服务器SSL数字证书和客户端单位数字证书的格式遵循 X.509 标准。 X.509 是由国际电信联盟&#…

css样式优先级计算规则

css样式的优先级分为引入优先级和声明优先级。 引入优先级 引入样式一般分为外部样式&#xff0c;内部样式&#xff0c;内联样式。 外部样式&#xff1a;使用link引入的外部css文件。 内部样式&#xff1a;使用style标签书写的css样式。 内联样式&#xff1a;直接书写在html标签…

phpstudy-5.6.27-nts  安装redis扩展

2019独角兽企业重金招聘Python工程师标准>>> redis扩展安装流程 第一步&#xff1a; 首先直接查看一下phpinfo()的信息 找到下面两条信息 Architecturex86PHP Extension BuildAPI20131226,NTS,VC11Loaded Configuration FileD:\phpStudy\php\php-5.6.27-nts\php.ini…

用DDA Convolution和Perlin Noise来模拟水粉画笔触

在西方&#xff0c;水彩画和水粉画是可以统称为Watercolor的,水粉画通常也称为不透明水彩画或树胶水彩画&#xff08;Gouache&#xff09;&#xff0c;两者既有相似之处&#xff0c;又有所区别。水粉画是以水作为媒介&#xff0c;这一点&#xff0c;它与水彩画是相同的。所以&a…

第三课 Makefile文件的制作(上)

1.序言&#xff1a; 前面的课程讲解了从gcc编译过程到其实践&#xff0c;大家可以看到其实在这些步骤中有些是可以简化编译的&#xff0c;但由于参数多以及项目中文件数量多的原因难免会造成错误甚至是浪费大量的时间在这编译上&#xff0c;为此linux系统中专门也有这个工具&am…

刺猬文│从启动方式来看播客链的运行机制—设置验证者

&#xff08;图片出自网络&#xff0c;版权归原作者所有&#xff09;上一篇刺猬文我们介绍了播客链是如何实现Dpos的&#xff0c;其实质过程就是&#xff1a;节点A打包&#xff0c;将打包的区块发送给其它的节点&#xff0c;其它节点根据当前时间&#xff0c;判断是否应该由A节…

[记忆碎片的磁盘整理]老妈

卷标&#xff1a;老妈 挂载点&#xff1a;/family/mother 分区格式&#xff1a;亲情 备注&#xff1a;老妈固然是我人生中的至亲&#xff0c;但是搜遍我的大闹&#xff0c;也没能发现一点关于老妈的特殊记忆。老妈是一位再普通不过的女人、妻子、母亲。也本该如此吧。碎片文件&…

探究Java如何实现原子操作(atomic operation)

1. 让我们首先了解下java 中 Volatile 关键字 Volatile可实现java内存模型当中的可见性&#xff0c; java内存模型的可见性&#xff1a; 可见性&#xff0c;是指线程之间的可见性&#xff0c;一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果&#xff0c;另一…

JAVA-重写equalse规范、技巧

JAVA-重写equalse规范、技巧 1、自反性 任何非空引用x&#xff0c;x.equalse(x) 应该返回true2、对称性 任何引用x和y&#xff0c;当x.equals(y)返回true&#xff0c;y.equals(x)也应返回true3、传递性 任何引用x、y和z&#xff0c;当x.equalse(y)和y.equalse(z)&#xff0c;那…

Password Creator(HTA)

<!--- 功能&#xff1a; 生成随机密码- 输入&#xff1a; 用户的设置- 输出&#xff1a; 随机密码&#xff0c;同时拷贝到剪切板- 作者&#xff1a; maskx- 版本&#xff1a; v1.0- 历史纪录&#xff1a; 2007-7-11新建 - 创建时间&#xff1a; 200…

Julia 排坑指南

Julia 是一个高效的计算语言&#xff0c;据说性能和C有一拼。 Google也开始支持TPU的Julia&#xff0c; 个人觉得他的可视化比较厉害&#xff0c;下面是自己安装过程的截图&#xff0c;由于Julia的服务器在国外&#xff0c;所以下载的过程会出现一些不可描述的问题&#xff0c;…

Arts 第十九周(7/22 ~ 7/28)

ARTS是什么&#xff1f;Algorithm&#xff1a;每周至少做一个leetcode的算法题&#xff1b;Review&#xff1a;阅读并点评至少一篇英文技术文章&#xff1b;Tip&#xff1a;学习至少一个技术技巧&#xff1b;Share&#xff1a;分享一篇有观点和思考的技术文章。 Algorithm 深度…

难过的要命。。。。。。

请允许我这样叫几下&#xff0c;我知道自己是个老姑娘了&#xff0c;不能像小女孩那样碰到点不开心的事就一哭二闹三上吊。我不哭不闹更不会傻得去上吊&#xff0c;我还有几十年的大好日子要过呢&#xff0c;我儿子还没生呢。现在我们还没有正式的摊牌&#xff0c;应该说只差最…

基于.NET2.0的System.Net.Mail发送邮件Demo

第一种: //emailaddress邮件接收者地址 //mailcontent邮件主体内容 //mailtitle邮件标题 //mailsubject邮件主题 public bool SendMail(string emailaddress,string mailcontent,string mailtitle,string mailsubject) { …

美国美国,USA USA

外派美国微软接的项目职位名称&#xff1a;开发主管&#xff08;SDE LEADER&#xff09; 工作城市&#xff1a;Redmond 职位要求: Good English communicationGood SQL and C# .net framework experienceBackend developmentBI knowledge (he is expected to deal with millio…

Windows Server 2016之RDS配置证书

证书我们可以自己创建也可以到阿里云申请&#xff0c;一次申请可以用一年&#xff0c;&#xff08;自己创建的证书是不受信任的&#xff09;所以我们在阿里云上申请的&#xff0c;下面我们就把申请到的证书下载下来&#xff0c;放到一个文件夹里&#xff0c;并解压接下来我们就…