洛谷 P2101 命运石之门的选择 (分治)
P2101 命运石之门的选择 (分治)
介绍
El Psy Congroo
题目链接
没错,作为石头门厨,怎么能不做石头门的题呢?(在搜石头门的时
候搜到了本题)
本题作为一道分治基础练习题还是不错的,虽然看起来挺简单,但还
是有不少需要思考的地方的。(可能是我太菜了)
分析
我们对本题进行分析,
就拿下面这个图举例

我们首先观察到了红色部分,红色部分是当前所能构成的最大矩形
我们拥有两种涂色方法,横着涂和竖着图,因为涂一次色的代价与涂
色面积无关,所以我们每一次涂色需要尽可能的多涂。
对于红色部分,显然,全部采用同一种涂色方法是要比两
种方法同时采取更优的,因为当我们混用涂色方法时,一定是可以
通过去掉某一次涂色来降低所需代价的。
针对红色部分,如果我们全部采用竖着涂,因为我们要尽可能的多
涂,所以我们既然可以竖着涂完红色部分,也可以在同代价下涂完
整个图,所以我们目前涂完整个图的代价就是当前图形的宽度,如
果我们采用横着图,涂完整张的总代价就是(该图形中最低的小矩
形的高度)+(涂完红色部分以外部分的最小代价)
我们所要求的答案就是这两种方法的代价最小值
那如何求出涂完红色部分以外部分的最小代价呢?
这时候就要采用分治思想了,
我们用原图形减去红色部分,得到了一个或几个图形,我们目前要
求的就是涂完所有新图形的最小代价,我们针对每一个新图形都按
先前求原图形的最小代价的方法处理,最后将其合并即可。
放一下代码
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#define int long long
using namespace std;
const int maxn=1e4;
inline int read(){
int ret=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-f;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
ret=ret*10+(ch^'0');
ch=getchar();
}
return ret*f;
}
int n;
int m;
int a[maxn];
int slove(int l,int r){
if(l==r){
return 1;//边界
}
int t=r-l+1;//目前图形的宽度
int minn=0x3f3f3f3f;
for(int i=l;i<=r;i++){
if(a[i]<minn){
minn=a[i];//找到最低矩形的高度
}
}
int ans=minn;
for(int i=l;i<=r;i++){
a[i]-=minn;//减掉红色部分
}
int ll=l;
for(int i=l;i<=r;i++){
if(a[i]&&!a[i-1])
ll=i;
if(a[i]&&(!a[i+1]||i==r)){
ans+=slove(ll,i);//分治处理
}
}
return min(ans,t);
}
signed main(){
// freopen("a.txt","r",stdin);
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
cout<<slove(1,n);
return 0;
}
这一切都是命运石之门的选择
洛谷 P2101 命运石之门的选择 (分治)的更多相关文章
- Luogu P2101 命运石之门的选择(分治+搜索)
P2101 命运石之门的选择 题意 题目描述 在某一条不知名世界线的冈伦今天突然接到了一条\(dmail\),上面说世界线将会发生巨大变动,未来的他无论如何都无法扭转这种变动回到原来的世界线.而世界线 ...
- 洛谷P1393 动态逆序对(CDQ分治)
传送门 题解 听别人说这是洛谷用户的双倍经验啊……然而根本没有感觉到……因为另外的那题我是用树状数组套主席树做的……而且莫名其妙感觉那种方法思路更清晰(虽然码量稍稍大了那么一点点)……感谢Candy大 ...
- Bzoj2152/洛谷P2634 聪聪可可(点分治)
题面 Bzoj 洛谷 题解 点分治套路走一波,考虑\(calc\)函数怎么写,存一下每条路径在\(\%3\)意义下的路径总数,假设为\(tot[i]\)即\(\equiv i(mod\ 3)\),这时 ...
- 洛谷 P6199 - [EER1]河童重工(点分治+虚树)
洛谷题面传送门 神仙题. 首先看到这样两棵树的题目,我们肯定会往动态树分治的方向考虑.考虑每次找出 \(T_2\) 的重心进行点分治.然后考虑跨过分治中心的点对之间的连边情况.由于连边边权与两棵树都有 ...
- ACM数论之旅13---容斥原理(一切都是命运石之门的选择(=゚ω゚)ノ)
容斥原理我初中就听老师说过了,不知道你们有没有听过(/≧▽≦)/ 百度百科说: 在计数时,必须注意没有重复,没有遗漏. 为了使重叠部分不被重复计算,人们研究出一种新的计数方法. 这种方法的基本思想是: ...
- 洛谷【P1104】生日(选择排序版)
题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,不过我是来讲选择排序的. 选择排序\((Selection sort)\)是一种简单直观 ...
- 洛谷P1311 [NOIP2011提高组Day1T2]选择客栈
P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...
- 洛谷 题解 P1336 【最佳课题选择】
详细解析解题过程 设计状态 dp[i][j]表示前i节课题写j篇论文花费的最少时间 初始数组 for(int i=0;i<=20;i++) for(int j=0;j<=200;j++)d ...
- 洛谷 P2056 [ZJOI2007]捉迷藏 题解【点分治】【堆】【图论】
动态点分治入 门 题? 题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由 \(N\) 个屋 ...
随机推荐
- requests设置代理ip
# coding=utf-8 import requests url = "http://test.yeves.cn/test_header.php" headers = { &q ...
- PHP出现access denied问题及解决办法
配置好PHP环境后,访问页面,页面上只出现了 Access denied字样. 问题分析 打开 /usr/local/php/etc/php.ini 文件,找到 cgi.fix_pathinfo ; ...
- nginx给consul集群配置负载均衡
upstream consul { server 127.0.0.1:8501; server 127.0.0.1:8502; server 127.0.0.1:8503; } server { li ...
- 【Flutter 1-1】8个Flutter的优势以及为什么要在下一个项目中尝试Flutter
首发链接 让我们一起来了解Flutter与其他跨平台框架的优势,以及这些优势在开发流程中的作用. Flutter是什么 Flutter的优势 1. 跨平台使用相同的UI和业务逻辑 2. 节省开发时间 ...
- 女朋友看了我的博客,说太LOW了,于是我搞了一天~
持续原创输出,点击上方蓝字关注我 原创博客+1,点击左下角阅读原文进入 目录 前言 如何下载? 配置文件的分类 基本信息配置 修改主题 Next主题样式设置 添加动态背景 修改链接的样式 添加文章搜索 ...
- AWS Lambda 借助 Serverless Framework,迅速起飞
前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...
- 如何做好智能家居工业物联网串口转WiFi/4G/以太网无线AP方案的物联网WiFi模块选型
2020年一场突如其来的灾难袭来,各大经济市场在不同程度被按下了"暂停键".物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给人民带来安全.智能的 ...
- Docker部署Mysql, Tomcat, Nginx, Redis
1. Mysql部署 问题及解决方案 容器内的网络和外部机器不能直接通信 外部机器和宿主机可以直接通信 宿主机和容器可以直接通信 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射 ...
- vue-打包遇到的问题
vue-打包 打包后用iframe引入的html文件乱码 原因: 解决:用live server打开就不会乱码 生产环境移除所有的console命令 三种解决方法 发现vue-cli3.0在打包过程中 ...
- 01.axios封装
1. 始vue化项目 https://www.cnblogs.com/xiaonq/p/11027880.html vue init webpack deaxios # 使用脚手架创建项目 dea ...