一本通OJ 1603 綠色通道 題解

2022-09-21 12:51:11 字數 1435 閱讀 7762

高二數學《綠色通道》總共有 \(n\) 道題目要抄,編號 \(1\ldots n\),抄第 \(i\) 題要花 \(a_i\) 分鐘。小 y 決定只用不超過 \(t\) 分鐘抄這個,因此必然有空著的題。每道題要麼不寫,要麼抄完,不能寫一半。下標連續的一些空題稱為乙個空題段,它的長度就是所包含的題目數。這樣應付自然會引起馬老師的憤怒,最長的空題段越長,馬老師越生氣。

現在,小 y 想知道他在這 \(t\) 分鐘內寫哪些題,才能夠盡量減輕馬老師的怒火。由於小 y 很聰明,你只要告訴他最長的空題段至少有多長就可以了,不需輸出方案。

由於最長長度和最短時間都不確定。我們可以假設其中一項確定來思考。

考慮二分答案,二分最長空題段。

假設二分當前最長空題段為 \(k\),我們就可以嘗試dp處理。

設 \(dp_i\) 表示第 \(i\) 題做,且前 \(i\) 題的最長空題段小於等於 \(k\) 時的最短時間,我們可以列舉上一條做了的題,即:

\[dp_i=\min_^dp_j+a_i

\]答案我們可以在 \([n-k-1, n]\) 裡列舉最後一道題的位置,時間複雜度 \(o(n^2\log n)\)。

顯然,\(\min_^dp_j\) 可以用單調佇列優化,時間複雜度 \(o(n\log n)\)。

這是一道二分+單調dp的模板。

題目問最長能多長,可以考慮二分,成為切入點。

當最長長度確定,dp也很容易可以寫出。

超時後也容易發現,式子中可以用單調佇列優化,**不難打。

// problem: 1603:綠色通道

// contest: ssoier

// url:

// memory limit: 524 mb

// time limit: 1000 ms

// // powered by cp editor (

#includeusing namespace std;

#define int long long

inline int read()while(ch>='0'&&ch<='9')return x*f;}

//#define mo

#define n 500010

//#define m

int n, m, i, j, k;

int l, r, mid, ans;

int dp[n], a[n], t;

pairp;

deque>q;

int check(int k)

ans=0x7fffffffffffffff;

for(i=n-k-1; i<=n; ++i) ans=min(ans, dp[i]);

return ans<=t;

}signed main()

printf("%lld", l);

return 0;

}

題解 一本通1224 最大子矩陣

花兩分鐘靜心看看,望您有所收穫 1224 最大子矩陣 時間限制 1000 ms 記憶體限制 65536 kb 提交數 3073 通過數 1958 已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 11 1 子矩陣。比如,如下 4 4 的矩陣 0 2 7 0...

一本通題解 1251 仙島求藥

一本通 oj,計蒜客 oj,少年李逍遙的嬸嬸病了,王小虎介紹他去一趟仙靈島,向仙女姐姐要仙丹救嬸嬸。叛逆但孝順的李逍遙闖進了仙靈島,克服了千險萬難來到島的中心,發現仙藥擺在了迷陣的深處。迷陣由m n個方格組成,有的方格內有可以瞬秒李逍遙的怪物,而有的方格內則是安全。現在李逍遙想盡快找到仙藥,顯然他應...

一本通 3 1 練習 4 Tree 題解

題目位址 第一眼看到此題,感覺就是一道水題,直接加上前nee dneed need 小的白邊就行了,再處理到n 1 n 1n 1條黑邊,但是,打完後突然發現有問題。雖然加上了前nee dneed need 小的白邊,但是會出現樹不連通的現象,即無法構成生成樹。正解思路 二分乙個增量mid midmi...