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

2021-09-17 01:25:09 字數 1595 閱讀 9091

有n個盒子,高度為ai,可以數值刷盒子,也可以橫著刷,但如果前面沒盒子了,就要停下,問刷完這些盒子最少要刷多少次

在某一條不知名世界線的岡倫今天突然接到了一條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^9

先離散化,然後用f[i][j]來表示刷了前i個盒子,還刷了j行,然後要不一列下去刷,要不橫著刷,還有一種可能就是不用刷(之前已經刷到這個高度了)

#include

#include

#include

#include

using

namespace std;

int n,m;

long

long ans,a[

5005

],b[

5005

],f[5]

[5005];

intmain()

sort

(b+1

,b+1

+n);

//排序

m=unique

(b+1

,b+1

+n)-b-1;

//去重

f[0]

[0]=

0;//預處理

for(

int i=

1;i<=n;

++i)

for(

int i=

0;i<=m;

++i)

ans=

min(ans,f[n&1]

[i])

;//求最小值

printf

("%lld"

,ans)

;}

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

在某一條不知名世界線的岡倫今天突然接到了一條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...