一堆木頭棍子共有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)的次序進行加工)。
首先這樣乙個題目,首先想到使用喜聞樂見的貪心法,再看這一題,如果前一根木棍s相對於下一根木棍si的屬性滿足l>=li,w>=wi,那麼就可以減少木棍加工準備時間。自然會想到利用這兩個屬性排序,由於兩個屬性的優先順序一樣,那麼可以按照長度進行排序,當長度相等時再根據寬度排序。
有了這樣乙個貪心後的資料,接著就是模擬過程,求出答案。
#include #include using namespace std;
struct wood
;int n;
wood stick[5001];
bool cmp1(wood,wood);
int simulation(void);
int main(void)
int ans = 1;
sort(stick+1,stick+n+1,cmp1);
ans = simulation();
cout << ans << endl;
return 0;}
int simulation(void)
; int now = 1;
while(1)
}bool quit = true;
for(int i = 1;i <= n;i++)
}if(quit)
} return ans;}
bool cmp1(wood a,wood b)
return a.l > b.l;
}
P1233 木棍加工
一堆木頭棍子共有n根,每根棍子的長度和寬度都是已知的。棍子可以被一台機器乙個接乙個地加工。機器處理一根棍子之前需要準備時間。準備時間是這樣定義的 第一根棍子的準備時間為1分鐘 如果剛處理完長度為l,寬度為w的棍子,那麼如果下乙個棍子長度為li,寬度為wi,並且滿足l li,w wi,這個棍子就不需要...
P1233 木棍加工
miku 很簡單的線性dp 或者說不用dp 有兩維,隨便按照一維降序排個序,就成了個固定順序的一維問題了。直接 o n 2 貪心劃分不下降子串行或者說運用dilworth定理,求最長上公升子串行 貪心更快誒,可能是因為continue的多?dp include include include inc...
P1233 木棍加工
我是想寫寫dp來著 所以我查了標籤是dp的題。在做了三道藍題之後,蒟蒻的我想做一道簡單點的題恢復自信qwq 於是,這道題,我怎麼也下過不出轉移方程 但是我忽然發現,這道題根本就不用dp!貪心 排序即可!因為我們一定是要時間 n 的,所以我們就算最後什麼也沒找到,也不會比 n 更差,那麼我們先按照其中...