Luogu P2101 命運石之門的選擇(分治+搜索)

P2101 命運石之門的選擇

題意

題目描述

在某一條不知名世界線的岡倫今天突然接到了一條\(dmail\),上面說世界線將會發生巨大變動,未來的他無論如何都無法扭轉這種變動回到原來的世界線。而世界線變動的原因是現在的他不久后錯過了與助手的約會。他約好要和助手去約會,但是在去約會之前,由于一直拖欠房租,房東大叔要求他幫忙完成一幅畫的上色,然而他沒有以最快的速度完成這個任務,導致他錯過了與助手的約會,從而導致世界線的劇變。現在到了拯救世界的時候,由于岡倫并不擅長畫畫,于是他找到了同樣不擅長畫畫的你來幫他解決這個問題(這是命運石之門的選擇)。不管怎樣現在拯救世界的重任交到了你的手上,而你雖然不擅長畫畫,但是你可以使用編程來幫助你解決這個問題。

這幅畫十分抽象:它由\(N\)個寬度為\(1\)高度為\(H_i\)的矩形組成,矩形并排排列,相鄰的矩形間沒有空隙,初始情況下每個矩形都是沒有顏色的。你有一個寬度為\(1\)的刷子,你可以豎直或水平的刷,每次使用刷子,你的刷子都必須保證一直全部處于矩形中,即不能刷到矩形以外的地方去,當然你每次刷的時候也不能拐彎。你每刷一次,要花費\(1\)的時間,這和刷的長度無關,比如你可以從最左邊刷到最右邊(當然是不經過矩形以外的部分),這也只花費\(1\)的時間。你的目的是將全部的矩形都涂滿顏色。請輸出這個最短的時間,以便岡倫決定是自己來完成這個任務還是讓你來做苦力。

輸入輸出格式

輸入格式:

\(1\)行:一個正整數\(N\),表示矩形的個數。

接下來\(N\)個正整數\(H_i\),表示第\(i\)個矩形的高度。

輸出格式:

一個整數,表示最少花費的時間。

輸入輸出樣例

輸入樣例#1:

5
2 2 1 2 1

輸出樣例#1:

3

說明

【數據規模】

\(30\% N\leq 20, H_i\leq 100\)

\(60\% N\leq 100, H_i\leq 1000\)

\(100\% N\leq 5,000, H_i\leq 10^9\)

思路

這就是個簡單的分治或者\(dp\)啊。 --logeadd

完全不會分治的蒟蒻我只能做一些分治水題\(qwq\)

我們對一個區間來搜索,再來一個一個區間地分下去。具體來說,我們用一個函數\(dfs(l,r)\)來查詢區間\([l,r]\)的答案,而這個答案又可以用多個子區間\([l,x_1],[x_1+1,x_2],[x_2+1,x_3]\cdots [x_y+1,r]\)得到,這樣我們一步步地分區間搜索,最后合并答案。

那么怎么合并答案呢?對于一個區間\([l,r]\)有一個顯然的結論:先把下面的方塊橫著涂滿,然后再豎著涂剩余的區間,所以我們可以統計出這個區間的最小高度,然后把它橫著涂滿,再把剩余的方塊\(dfs\)考慮就好了。

比方說我們有這樣的一個形狀:

    ■■  ■■   ■
■■  ■■  ■■
■■■■■■■■■■
■■■■■■■■■■

先把下面的方塊橫著涂:

    ■■  ■■   ■
■■  ■■  ■■
□□□□□□□□□□
□□□□□□□□□□

上方就多出來了三個小區間,再來分別\(dfs\)就好了。

AC代碼

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN=5e3+5;
LL n,a[MAXN];
LL read()
{LL re=0;char ch=getchar();while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();return re;
}
LL ask(LL l,LL r)
{if(l==r) return 1;LL re=INT_MAX;for(LL i=l;i<=r;i++) re=min(re,a[i]);for(LL i=l;i<=r;i++) a[i]-=re;for(LL i=l;i<=r;i++){if(!a[i]) continue;LL j=i;while(j<=r&&a[j+1]) j++;re+=ask(i,j),i=j;}return min(r-l+1,re);
}
int main()
{n=read();for(LL i=1;i<=n;i++) a[i]=read();printf("%lld",ask(1,n));return 0;
}

轉載于:https://www.cnblogs.com/coder-Uranus/p/9885005.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396267.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396267.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396267.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java初級筆記-第五章

第五章 面向對象的特點 5.1 繼承 面向對象的重要特點之一就是繼承。類的繼承使得能夠在已有的類的基礎上構造新的類&#xff0c;新類除了具有被繼承類的屬性和方法外&#xff0c;還可以根據需要添加新的屬性和方法。繼承有利于代碼的復用&#xff0c;通過繼承可以更有效地組織程…

取模運算性質_求余、取模運算在RTOS中計算優先級的理解

uCOS3中的部分源碼&#xff1a;/* 置位優先級表中相應的位 */void OS_PrioInsert (OS_PRIO prio){CPU_DATA bit;CPU_DATA bit_nbr;OS_PRIO ix;/* 求模操作&#xff0c;獲取優先級表數組的下標索引 */ix prio / DEF_INT_CPU_NBR_BITS;//32bits//由于數據均為無符號數,prio為8位…

歸結原則_被聘為自由職業者歸結為一件事:信任。

歸結原則by I quit Medium我退出Medium 被聘為自由職業者歸結為一件事&#xff1a;信任。 (Getting hired as a freelancer comes down to one thing: trust.) When I ask freelancers what they think is the most important factor in landing a client project, they usual…

關于JS的傳遞方式的小理解

var test function() {//將其看成是創建了一個對象alert(1);}var otherTest test;//賦值導致test和otherTest指向同一個對象otherTest();test.sd 9;//對對象進行操作&#xff0c;兩者都發生改變alert(otherTest.sd);//9var test function() {//test重新創建了一個對象&…

java p代表哪種數據類型_java數據類型(八種基本數據類型+三種引用類型)

1、整型類型 占用字節 取值范圍byte 1 -128~127 (7次方)short 2 -32 768~32 767 (15次方)int …

python中的隨機函數

python--隨機函數&#xff08;random,uniform,randint,randrange,shuffle,sample&#xff09; 本文轉載自:[chamie] random() random()方法&#xff1a;返回隨機生成的一個實數&#xff0c;它在[0,1)范圍內 運用random()方法的語法&#xff1a; import random #random()方法不…

Setuptool+pip安裝

https://pypi.python.org/pypi/setuptools 1. 下載ez_setup.py文件&#xff0c;cmd進入安裝目錄&#xff1b; 2. python setup.py install https://pip.pypa.io/en/latest/index.html 1、cmd進入ez_setup.py文件目錄2、用setuptools安裝&#xff1a;easy_install pip轉載于:htt…

rss 閱讀源_如何使用RSS更有效地閱讀

rss 閱讀源by Naman Kamra通過納曼卡姆拉(Naman Kamra) 如何使用RSS更有效地閱讀 (How to read more efficiently with RSS) Rich Site Summary (RSS) was developed way back in 1999 as a way to quickly subscribe to blogs and newspapers, back before tools like Twitte…

python 遍歷usb設備_python程序員教你寫腳本玩微信跳一跳,只要有耐心,你就是王者!...

溫馨提示&#xff1a;微信已經開始檢測分數異常高的情況了&#xff0c;請大家不要跑太高哦游戲模式這是一個 2.5D 插畫風格的益智游戲&#xff0c;玩家可以通過按壓屏幕時間的長短來控制這個「小人」跳躍的距離。可能剛開始上手的時候&#xff0c;因為時間距離之間的關系把握不…

一個電腦同時運行 64bit 和 32bit 的eclipse 如何匹配 jdk環境

一個電腦同時運行 64bit 和 32bit 的 eclipse 如何匹配 jdk環境 1 eclipse 分 64bit 和 32bit 兩種. 64bit的eclipse 只能搭配 64bit的 jdk 使用. 32bit的eclipse 只能搭配 32bit的 jdk 使用. 2 電腦上安裝好 32bit 和 64bit 的 jdk ,分別安裝在不同的路徑中. 比如我的3…

基本數據類型(dict)

目錄: 1.字典的簡單介紹 2.字典增刪改查和其他操作 3.字典的嵌套 一.字典的簡單介紹 字典(dict)是python中唯一的一個映射類型,他是以{}括起來的鍵值對組成,在dict中key是唯一的,在保存的時候,根據key類計算出一個地址然后將key-value保存在這個地址中這種算法被稱作hash算法,所…

自學成才翁_僅因為您是自學成才,并不意味著您必須獨自學習。

自學成才翁by Piotr Bakker皮特巴克(Piotr Bakker) 僅因為您是自學成才&#xff0c;并不意味著您必須獨自學習。 (Just because you’re self-taught doesn’t mean you have to learn alone.) I am a self-taught designer with no formal training. No art school, no priva…

java 近似值 循環次數,java題求解

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓public class PAI{public static void main(String[] args){int n 700;//Hello World! pai 3.1401640828900845(n 700)System.out.println("Hello World! pai " getPAI(n));//Hello World! pai 3.1430191863875865…

jq匹配偶數行_jquery怎么實現奇偶行不同背景顏色?

做表格的時候&#xff0c;經常要讓奇偶行顯示不同背景色&#xff0c;一來使表格顯得更美觀&#xff0c;二來使同行數據查找更快捷方便。通常我們是怎么實現的呢&#xff1f;就是在每個tr標簽上加css樣式。代碼如下所示&#xff1a;.odd {background-color:yellow;}.even {backg…

2016/4/19 ①單個文件上傳 ②上傳圖片后 預覽圖片

1&#xff0c;f1.php <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body> <!-- 作業:在網上找上傳圖片預覽的代碼 上傳服務器 再預覽--> <fo…

Android項目里集成Cordova詳解

2019獨角獸企業重金招聘Python工程師標準>>> 一 安裝nodejs二 cmd創建Android項目三 導入工程 運行一下四 調用插件五 Android studio環境下將CordovaLib作為依賴導入六 自定義插件七 java類中的一些問題八 在CordovaActivity中添加原生View組件 九 在Fragment里使用…

facebook移動端框架_2016年所有頂級移動應用均歸Google或Facebook所有

facebook移動端框架Today Nielsen released their report about the most widely used mobile apps in 2016. The top 8 apps were all owned by just two corporations: Google and Facebook.今天&#xff0c;尼爾森發布了有關2016年使用最廣泛的移動應用程序的報告。排名前8的…

php 判斷瀏覽器是ie,js判斷是否是ie瀏覽器

怎么去看瀏覽器的內核等信息 ---- js的全局對象window子屬性navigator.userAgent&#xff0c;這個屬性是包含了瀏覽器信息的相關信息&#xff0c;包括我們需要的瀏覽器內核navigator.userAgent這個值取出來是個字符串&#xff0c;可以通過string的 indexOf方法或者正則匹配來驗…

【JAVA基礎】一:聊聊筆試常見到的 “==、equal” 比較是否相等的內在差別

開始本文之前&#xff0c;先讓我們記住一個口訣&#xff08;這個口訣只針對基礎的類比如String、Integer等&#xff0c;如果是自定義的類&#xff0c;需要看equal的具體實現&#xff09;&#xff1a;equal比較其值&#xff0c; 比較地址 這兩天在走查代碼的時候發現一個童鞋&am…