P1233 木棍加工

2021-10-24 04:12:52 字數 984 閱讀 7284

一堆木頭棍子共有n根,每根棍子的長度和寬度都是已知的。棍子可以被一台機器乙個接乙個地加工。機器處理一根棍子之前需要準備時間。準備時間是這樣定義的:

第一根棍子的準備時間為1分鐘;

如果剛處理完長度為l,寬度為w的棍子,那麼如果下乙個棍子長度為li,寬度為wi,並且滿足l>=li,w>=wi,這個棍子就不需要準備時間,否則需要1分鐘的準備時間;

計算處理完n根棍子所需要的最短準備時間。比如,你有5根棍子,長度和寬度分別為(4, 9),(5, 2),(2, 1),(3, 5),(1, 4),最短準備時間為2(按(4, 9)、(3, 5)、(1, 4)、(5, 2)、(2, 1)的次序進行加工)。

第一行是乙個整數n(n<=5000),第2行是2n個整數,分別是l1,w1,l2,w2,…,ln,wn。l和w的值均不超過10000,相鄰兩數之間用空格分開。

僅一行,乙個整數,所需要的最短準備時間。

輸入 #1複製

5

4 9 5 2 2 1 3 5 1 4

輸出 #1複製

2
思路:洛谷上標籤是動態規劃,但是我用的是貪心,排個序,先考慮l,再考慮w,最終答案只需要考慮w就行了(此時l已經滿足條件),從二維變一維,最後變成了飛彈攔截第二問,貪心即可。

#includeusing namespace std;

const int n=5005;

int n,dp[n],vis[n];

struct nodea[n];

bool cmp(const node &a, const node &b)

return a.l>b.l;

}int main()

sort(a+1,a+1+n,cmp);

int s=0,ans=0,m;

while(s} }

cout

}

P1233 木棍加工

miku 很簡單的線性dp 或者說不用dp 有兩維,隨便按照一維降序排個序,就成了個固定順序的一維問題了。直接 o n 2 貪心劃分不下降子串行或者說運用dilworth定理,求最長上公升子串行 貪心更快誒,可能是因為continue的多?dp include include include inc...

P1233 木棍加工

我是想寫寫dp來著 所以我查了標籤是dp的題。在做了三道藍題之後,蒟蒻的我想做一道簡單點的題恢復自信qwq 於是,這道題,我怎麼也下過不出轉移方程 但是我忽然發現,這道題根本就不用dp!貪心 排序即可!因為我們一定是要時間 n 的,所以我們就算最後什麼也沒找到,也不會比 n 更差,那麼我們先按照其中...

P1233 木棍加工

顯然可以看出是求最小的雙關鍵字不上公升子串行的覆蓋數。根據dirworth定理就可以換去求最長的上公升子串行。雙關鍵字的最長上公升子串行求法 先將乙個關鍵字上公升地排序,另乙個關鍵字下降,按照原來的那樣n 2的做即可。其實蒟蒻不明白其中的原理,如果有大佬知道的話麻煩告訴一聲 include incl...