洛谷P4360 CEOI2004 鋸木廠選址

2021-10-03 02:26:20 字數 890 閱讀 8115

做兩遍dp,dp[k][i]表示前i個位置放k個鋸木廠的最小值

先把整個順序反過來,那麼0的位置就是山腳的鋸木廠

設sum[i],f[i]是sum[i]w[i]字首和,f2[i]是w[i]的字首和

dp[1][i]=f[i]-f[k]-sum[k+1](f2[i]-f2[k])+dp[0][k]

展開成f2[k]sum[k+1]-f[k]+dp[0][k]=f2[i]sum[k+1]+dp[1][i]-f[i]

k=f2[i]遞增,sum[k+1]遞增,希望截距dp[1][i]-f[i]盡可能小

畫圖分析得用單調佇列維護乙個下凸包

#includeusing namespace std;

const int maxl=2e4+10;

typedef long long ll;

int n;

ll w[maxl],d[maxl],sum[maxl],f[maxl],f2[maxl];

ll dp[3][maxl];

struct node

s[maxl];

inline void prework()

}inline ll calc(ll k,int id)

inline bool cmpk(node a,node b,node c)

inline void solv(int k)

; s[++tail]=d;

for(int i=1;i<=n;i++)

; while(headtail--;

s[++tail]=d; }}

inline void mainwork()

inline void print()

int main()

洛谷 P1437 HNOI2004 敲磚塊

在乙個凹槽中放置了 n 層磚塊 最上面的一層有n 塊磚,從上到下每層依次減少一塊磚。每塊磚 都有乙個分值,敲掉這塊磚就能得到相應的分值,如下圖所示。14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 層的第j 塊磚的話,若i 1,你可以直接敲掉它 若i...

洛谷 P2292 HNOI2004 L語言

ac自動機 dp 洛谷這題資料加強之後用bfs t了最後一兩個點 用了乙個dp陣列做轉移 注意一下字串下標的偏移 因為有了dp陣列 存下trie樹上的結尾結點的字串長度 注意一下ac自動機的空間和dp陣列的空間 其他就沒啥了 include include include include inclu...

洛谷 P2292 HNOI2004 L語言

標點符號的出現晚於文字的出現,所以以前的語言都是沒有標點的。現在你要處理的就是一段沒有標點的文章。一段文章t是由若干小寫字母構成。乙個單詞w也是由若干小寫字母構成。乙個字典d是若干個單詞的集合。我們稱一段文章t在某個字典d下是可以被理解的,是指如果文章t可以被分成若干部分,且每乙個部分都是字典d中的...