現有n根木棒,已知它們的長度和重量,要用一部木工機一根一根地加工這些木棒。該機器在加工過程中需要一定的準備時間,是用於清洗機器,調整工具和模板的。木工機需要的準備時間如下:
(1)第一根木棒需要1分鐘的準備時間。
(2)在加工完一根長為length,重為weight的木棒之後,接著加工一根長為length』(length』<=length),重為weight』(weight<=weight』)的木棒是不需要任何準備時間的。否則需要一分鐘的準備時間。
本題的要求是:
給定n(1<=n<=5000)根木棒,已知它們的長度和重量,請編寫程式:找到加工完所有的木棒所需要的最少準備時間,以及加工這些木棒的順序。
先對n根木棒按照長度進行全域性排序,得到了乙個長度有序而重量無序的序列(貪心先按長度排序)。
再在每乙個同一長度序列中,對重量進行區域性排序。至此,長度和重量都是有序的。
最長單調遞增子串行的個數(採用動態規劃),即為最終的答案。
#include
#define maxn 5001
using
namespace std;
struct stick
;bool
cmp(stick a,stick b)
intlis
(int n,stick a)
int max=0;
for(
int i=
0;i(b[i]
>max)
max=b[i]
;return max;}}
intmain()
}sort
(data,data+n,cmp)
; cout<<
lis(n,data)
<}
演算法 貪心 動態規劃揹包問題
貪心演算法 一 簡介 貪心演算法,又稱 貪婪演算法 在對問題求解時,總是做出在當前看來是最好的選擇。區域性最優解 也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似...
剪繩子(貪心 動態規劃)
準備找工作,開始刷題,牛客劍指offer 給你一根長度為n的繩子,請把繩子剪成整數長的m段 m n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 xk 1 x.xk m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到...
貪心 動態規劃之刪數問題2072
time limit 1000ms memory limit 65536kb submit statistic problem description 鍵盤輸入乙個高精度的正整數n 100位 去掉其中任意s個數字後剩下的數字按照原來的左右次序組成乙個新的正整數。程式設計對給定的n與s,尋找一種方案,...