[蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)
问题描述
我的某室友学过素描,墙上有n张他的作品。这些作品都是宽度为1,高度不定的矩形,从左到右排成一排,且底边在同一水平线上。
宿舍评比就要来了,为了及格,我们决定买不多于m块的矩形木板,把这些作品和谐掉。要求木板也从左到右排成一排,且底边与作品的底边在同一水平线上。
在能够把所有作品和谐掉的前提下,我们希望这些木板的面积和最小,问最小面积和。
输入格式
第一行两个数n和m,表示作品数和木板数;
第二行n个数Hi,表示从左到右第i个作品的高度。
输出格式
一行一个数ans,表示答案。
样例输入
5 2
4 2 3 5 4
样例输出
22
数据规模和约定
对于30%的数据:1<=n,m<=10;
对于100%的数据:1<=n,m<=100,1<=Hi<=10000。
思路:挺明显的动态规划。dp[l][r][num]数组代表由第l块木板到第r块画,用num块木板遮盖所需要的最小面积。
状态转移方程:
dp[l][r][num]=min(dp[l][r][num],(i-l+1)*H+dfs(i+1,r,num-1));
需要加几个剪枝的条件否则会超时:
①如果dp[l][r][num]出现过,就可以直接返回。
②如果num变为负数,这就说明l-r用num块木板不够,就直接返回inf
③如果说r-l+1<num,说明这些木板多余了,那么只用r-l+1块就可以了。
④如果说l>r了但是num还没有用完的话,这样肯定不是最优的。为什么呢?极限思想,我们可以将每一幅画都用一块木板和谐,这样应该是最小的。num还不为0,说明前面那种方法一定可以。这样的话,就说明之前那种办法不是最优的。
代码如下:
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;const int maxx=1e2+10;
int dp[maxx][maxx][maxx];
int h[maxx];
int n,m;inline int dfs(int l,int r,int num)
{if(num>r-l+1) return dfs(l,r,r-l+1);if(l>r&&num) return inf;if(l>r&&num==0) return 0;if(num<0) return inf;if(dp[l][r][num]!=inf) return dp[l][r][num];int H=0;for(int i=l;i<=r;i++){H=max(H,h[i]);dp[l][r][num]=min(dp[l][r][num],(i-l+1)*H+dfs(i+1,r,num-1));}return dp[l][r][num];
}
int main()
{scanf("%d%d",&n,&m);memset(dp,inf,sizeof(dp));for(int i=1;i<=n;i++) scanf("%d",&h[i]);printf("%d\n",dfs(1,n,m));return 0;
}
努力加油a啊,(o)/~
[蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)相关推荐
- 蓝桥杯 算法提高 和谐宿舍2 (Python3 实现)(动态规划)
问题描述 我的某室友学过素描,墙上有n张他的作品.这些作品都是宽度为1,高度不定的矩形,从左到右排成一排,且底边在同一水平线上. 宿舍评比就要来了,为了及格,我们决定买不多于m块的矩形木板,把这些作品 ...
- 蓝桥杯 乘积最大(区间dp+记忆化搜索)
问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...
- [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- [蓝桥杯][算法提高VIP]夺宝奇兵-dp
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- JAVA 蓝桥杯 算法提高 阮小二买彩票
JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...
- [蓝桥杯][算法提高VIP]阮小二买彩票
[蓝桥杯][算法提高VIP]阮小二买彩票 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察下 ...
- 【蓝桥杯算法提高VIP-开灯游戏(两种超易理懂解法:暴力/位操作(切换位))(纯正C语言代码)】
蓝桥杯算法提高VIP-开灯游戏 题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二, ...
- [蓝桥杯][算法提高] 填充蛋糕
[蓝桥杯][算法提高] 填充蛋糕 编程计算涂满高为2,半径为r的圆形蛋糕表面,需要多少表面积的奶油(只要涂上表面和侧面) 读入一个数r,输出需要奶油的表面积,结果保留一位小数 样例输入 5.0 样例输 ...
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
最新文章
- 重庆python就业工资待遇-重庆python培训多少钱?
- 2018.10.26 NOIP模拟 瓶子 (dp/贪心)
- python不简单_Python学习并不简单!月薪过万也不易
- springCloud - 第8篇 - 配置文件管理中心 - 集群模式(负载匀衡)使用
- 云服务器文件传输问题
- Java实现ActiveMQ之队列的生产者和消费者(一)
- javascript 西瓜一期 15 数据的存储单位
- 结对编程项目作业2-开发环境搭建过程
- 互联网大厂“抢填”高考志愿
- Pandas 对象储存
- SpringCloud工作笔记086---SpringBoot启动报错:No active profile set, falling back to default profiles
- Python模块:生成随机数模块random
- 《游戏设计艺术(第2版)》——学习笔记(15)第15章 玩家通过界面玩游戏
- JFlash烧录不知名的ARM芯片
- 发票专用驱动sjz_增值税发票选择确认平台使用手册
- STM32应用(三)一阶卡尔曼滤波原理和ADC读取红外测距模块的数值
- 混合线性模型不同模型拟合的可视化
- 如何将IP地址批量改变为城域网的IP地址
- IOTOS物联中台从0到1开发Thales800驱动 实例详解
- 关于java中JDBC读取字段属性原理
热门文章
- SQL触发器实例讲解
- C#自定义ConfigSections节 操作 。
- IOS基础之愤怒的小方块
- javaheapspace解决方案_高手总结的9种 OOM 常见原因及解决方案
- AltiumDesigner14.3.X系列软件安装及破解过程
- mysql5.7.18压缩包下载_Centos7搭建Mysql5.7数据库
- Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决
- Android开发之设置listview分割线的颜色
- Android开发之品牌机型不同setMargins属性无效的bug
- 杭州人有福了!菜鸟配送升级新增24小时送药服务