題目見
這道題是lis(longgest increasing string)的乙個變種版本。對於lis問題,我倒是很快能寫出答案,但是如果加上一些限制條件,寫起來就有點難度了。
我們常用的做法是簡單的dp,時間複雜度是o(n^2),如果想要達到o(nlogn),就要在選擇最大長度上做一些優化。如下:
//返回b中剛剛大於num的元素的下標*****************************重要
intbinarysearch(
intnum
,int
k)
return
low; }
//非遞迴解,時間複雜度為o(nlgn)
//增加乙個陣列m[13],m[i]表示最長長度為i + 1的increasing subsequence的最後乙個元素的最小值
int
lis2()
} return
k; }
這道題先對乙個維度排序,這都可以想到。然後對另乙個維度進行dp,注意一些限制條件,比如長寬都要大於卡片大小。用乙個陣列pre記錄序列前乙個元素的下標。
然後倒序輸出pre的記錄。還是要多練啊!dp太不熟了,知道了方法寫出的**還是非常煩,甚至time limited exceed,功力不夠!
倍增好題記錄
超級鋼琴 bzoj 2006 noi 2010 超級鋼琴 貪心 st表 堆 藥不能停 hdu 3712 fiolki 帶邊權並查集 啟發式合併 監控 類似 國旗計畫 不同的是要去掉被完全包含的區間 國旗計畫 bzoj4444 luogu 4155 loj 2007 scoi2015 國旗計畫 倍增 ...
暑假集訓前好題記錄
luogu4768 noi2018 歸程 dijkstra kruskal重構樹 hnoi2016 樹 可持久化線段樹 樹上倍增 luogu 4688 ynoi2016 掉進兔子洞 莫隊 bitset bzoj4358 permu 可撤銷的莫隊 bzoj 3173 tjoi 2013 最長上公升子串...
牛客網好題記錄01
class test static class a public void setvalue int value public intgetvalue finally static class b extends a public void setvalue int value 本人看到此題,讀著讀...