问题描述
  我的某室友学过素描,墙上有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(记忆化搜索)相关推荐

  1. 蓝桥杯 算法提高 和谐宿舍2 (Python3 实现)(动态规划)

    问题描述 我的某室友学过素描,墙上有n张他的作品.这些作品都是宽度为1,高度不定的矩形,从左到右排成一排,且底边在同一水平线上. 宿舍评比就要来了,为了及格,我们决定买不多于m块的矩形木板,把这些作品 ...

  2. 蓝桥杯 乘积最大(区间dp+记忆化搜索)

    问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  3. [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  4. [蓝桥杯][算法提高VIP]夺宝奇兵-dp

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  5. JAVA 蓝桥杯 算法提高 阮小二买彩票

    JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...

  6. [蓝桥杯][算法提高VIP]阮小二买彩票

    [蓝桥杯][算法提高VIP]阮小二买彩票 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察下 ...

  7. 【蓝桥杯算法提高VIP-开灯游戏(两种超易理懂解法:暴力/位操作(切换位))(纯正C语言代码)】

    蓝桥杯算法提高VIP-开灯游戏 题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二, ...

  8. [蓝桥杯][算法提高] 填充蛋糕

    [蓝桥杯][算法提高] 填充蛋糕 编程计算涂满高为2,半径为r的圆形蛋糕表面,需要多少表面积的奶油(只要涂上表面和侧面) 读入一个数r,输出需要奶油的表面积,结果保留一位小数 样例输入 5.0 样例输 ...

  9. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

最新文章

  1. 重庆python就业工资待遇-重庆python培训多少钱?
  2. 2018.10.26 NOIP模拟 瓶子 (dp/贪心)
  3. python不简单_Python学习并不简单!月薪过万也不易
  4. springCloud - 第8篇 - 配置文件管理中心 - 集群模式(负载匀衡)使用
  5. 云服务器文件传输问题
  6. Java实现ActiveMQ之队列的生产者和消费者(一)
  7. javascript 西瓜一期 15 数据的存储单位
  8. 结对编程项目作业2-开发环境搭建过程
  9. 互联网大厂“抢填”高考志愿
  10. Pandas 对象储存
  11. SpringCloud工作笔记086---SpringBoot启动报错:No active profile set, falling back to default profiles
  12. Python模块:生成随机数模块random
  13. 《游戏设计艺术(第2版)》——学习笔记(15)第15章 玩家通过界面玩游戏
  14. JFlash烧录不知名的ARM芯片
  15. 发票专用驱动sjz_增值税发票选择确认平台使用手册
  16. STM32应用(三)一阶卡尔曼滤波原理和ADC读取红外测距模块的数值
  17. 混合线性模型不同模型拟合的可视化
  18. 如何将IP地址批量改变为城域网的IP地址
  19. IOTOS物联中台从0到1开发Thales800驱动 实例详解
  20. 关于java中JDBC读取字段属性原理

热门文章

  1. SQL触发器实例讲解
  2. C#自定义ConfigSections节 操作 。
  3. IOS基础之愤怒的小方块
  4. javaheapspace解决方案_高手总结的9种 OOM 常见原因及解决方案
  5. AltiumDesigner14.3.X系列软件安装及破解过程
  6. mysql5.7.18压缩包下载_Centos7搭建Mysql5.7数据库
  7. Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决
  8. Android开发之设置listview分割线的颜色
  9. Android开发之品牌机型不同setMargins属性无效的bug
  10. 杭州人有福了!菜鸟配送升级新增24小时送药服务