DP 命運石之門的選擇

2021-09-17 01:18:08 字數 1830 閱讀 2942

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

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

第1行:乙個正整數n,表示矩形的個數。

接下來n個正整數hi,表示第i個矩形的高度。

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

輸入樣例

5

2 2 1 2 1

輸出樣例
3
【資料規模】

30% n<=20, hi<=100

60% n<=100, hi<=1000

100% n<=5,000, hi<=10^9dpf[i

][j]

f[i][j]

f[i][j

]代表前i

ii個柱子從下往上橫著刷到j

jj滾動陣列注意

i

ii可以寫成i

ii&111i

−1

i-1i−

1可以寫成~i

ii&1

11

#include

#include

#include

#include

#include

using

namespace std;

int height[

5025

],h[

5025

],f[2]

[5025];

int ans,n,m,minn;

intmain()

sort

(h+1

,h+n+1)

; m=

unique

(h+1

,h+n+1)

-(h+1)

;//去重

memset

(f,0x3f

,sizeof

(f))

; f[0]

[0]=

0;minn=

2147483647

;for

(int i=

1;i<=n;

++i)

for(

int j=

0;j<=m;

++j)

for(

int j=m-

1;j>=0;

--j)

f[i&1]

[j]=

min(f[i&1]

[j+1

],f[i&1]

[j]);}

printf

("%d"

,minn)

;return0;

}

離散化 DP 命運石之門的選擇

有n個盒子,高度為ai,可以數值刷盒子,也可以橫著刷,但如果前面沒盒子了,就要停下,問刷完這些盒子最少要刷多少次 在某一條不知名世界線的岡倫今天突然接到了一條dmail,上面說世界線將會發生巨大變動,未來的他無論如何都無法扭轉這種變動回到原來的世界線。而世界線變動的原因是現在的他不久後錯過了與助手的...

DP 離散化 命運石之門的選擇

在某一條不知名世界線的岡倫今天突然接到了一條dmail,上面說世界線將會發生巨大變動,未來的他無論如何都無法扭轉這種變動回到原來的世界線。而世界線變動的原因是現在的他不久後錯過了與助手的約會。他約好要和助手去約會,但是在去約會之前,由於一直拖欠房租,房東大叔要求他幫忙完成一幅畫的上色,然而他沒有以最...

day2 命運石之門(卷積)

出題人題解 對質數p,計算其原根為g。這樣可以將ai寫成g bi的形式。於是乘法就變成了質數的加法,直接利 用fft進行計算即可。需要注意的是要對ai 0的情況特殊處理。my answer 原根的性質忘了,先跳過 qaq 總之可以 1,p 1 的ai全對映成了 1,p 1 的bi。令f x 為對於b...