HDU 4352做題筆記

2021-09-11 22:27:18 字數 607 閱讀 2331

聽說是多校的題,難怪做自閉了

參考了網上各種題解終於大概懂了,這裡放幾個我參考的

i.ii.

iii.

首先本題要求l到r範圍內,在2進製下,lis長度為k的數的個數,於是想到數字dp,那麼怎麼處理lis呢,以及如何記錄狀態呢

首先看到l和r的大小,要求乙個數的lis,通常想法是把這個數存下來。但是由於資料過大,存下來不太顯示,而且並沒有狀態可言,無法啟到優化的效果,於是,考慮到是乙個10進製正整數,所以最長的lis長度為10,所以設定乙個狀態來儲存lis長度,起到了記憶化和狀態壓縮的作用,既dp[pos][state],又因為每次輸入的l,r,k對於數字本身並沒有影響,於是可以再開一位k,節約時間,即dp[pos][state][k]。

然後考慮如何實現對數字進行查詢lis長度,這裡用到了2進製,因為只關心lis的長度,不需要關心lis是怎樣的,於是想到nlog(n)的計算lis的方法,此處考慮如何用2進製實現。

ll lis(ll x,ll s)

return cnt;

}ll lis(ll x,ll s)

return 0;

}

hdu4352 數字dp 狀態壓縮

題意 給出l和r找出在 l,r 中滿足最長遞增子串行長度等於k的個數。題解 狀壓想不到,看了kuangbin的才明白,1 10狀壓存數出現了沒有。利用了nlogn遞增字序列演算法的思想。include include include include includeusing namespace st...

HDU 4352(數字dp 狀態壓縮 LIS)

求區間範圍內最長上公升子串行數字k的數字有多少個 首先由數字dp引入思路,dp轉移方程為 dfs pos,status.累加dfs pos 1,stautselse 可備忘錄記錄的dp陣列為 dp pos status k 之所以要備忘錄k,是為了滿足不同k的訪問 status記錄的是開頭數字到po...

HDU4352 lis 狀壓 數字dp

題幹很智障,意思就是問從l到r裡lis為k的數有幾個 首先從0到9一共十個數,那麼最長不能超過10 dp陣列開乙個狀態,位數,k這樣的三維就夠 狀態是狀態壓縮的狀態 你可以用狀態壓縮來表達lis的陣列 有點取巧了,我看別人的題解都是兩維,lis部分用的nlgn方法 我第一次看見tle以後直接開了第三...