- 考試內容分析
t1音量調節
給定初始值 在不超過最大值且不小於0的前提下,將初值加上或減去每個讀入的數,使結果最大,若定會超過最大值或小於0,則輸出-1
分析:感覺是dp 求最大值很有dp那味。
但是感覺 總體最大值無法通過區域性最大值匯出 在推狀態轉移方程的時候無法射出狀態或者表示出很好的方程 耗費了相當一部分時間。
遂去寫t2 在完成t2後決定t1寫暴力分 用了dfs+符合題意的簡單剪枝 最後得分64,在極短的**書寫和除錯時間內 算是很讓人滿意的得分了。
t2配對
乙個棋盤 同一行或同一列只能取1個格仔,同時,有的格仔不能取 最後一共有多少種取法。
分析:棋盤最大是21 嘖嘖嘖 狀壓的味道明顯的不能更明顯了。
狀壓思路是f [ i ] [ j ] 表示當前已到第i行 狀態為j。
但是有個小問題 long long f[25][(1<<21)]貌似會爆空間。
所以用了乙個小技巧 只開f[2][(1<<21)],狀態轉移時用f[i&1]與f[(i-1)&1]進行轉移 後將f[(i-1)&1]清空。
這個題思路出的極快 小資料**完成極快(或者說較暴力的** )。
我開出乙個vector 記錄乙個狀態中的1有i個時所有可能的狀態cnt[i] 然後將cnt[i]與cnt[i-1]雙層迴圈進行轉移 最外層是行數i。
看似很對是不是 看似很正確是不是!
所以我在大資料的時候遇到了問題 發現答案不輸出 我加上打表後發現並非死迴圈而是打表跳動極為緩慢 遂打表cnt[i] 發現中間的數大概有2*1e6左右。
哦 那沒事了告辭。
遂寫優化 重構狀態轉移 由直接暴力列舉改為列舉位置(1-12)進行填充 判斷是否能填入狀態內進行轉移 遂過 ac。
但是我這個寫法用時較長 有一部分原因是該題有2s 不清楚有些ac大佬的短時**怎麼寫的。
t3補兵
t組資料 每組資料n個數 這n個數每s會減小1,同時 在每s 你可以使乙個數額外減小1 問你最多能使幾個數從1變為0
我不會 真的沒推出來式子 有點像dp 還有點數學的感覺 。耗費大量腦力思考遂寫了乙個也許有點道理的數學計算 最後得分10(感謝資料)。
t4蜘蛛棋盤
乙個棋盤 要求通過放置十字形格仔鋪滿棋盤 格仔可重疊 可不規則放置在邊緣 求總格仔數-十字形格仔的最大值(最少放置多少塊十字形格仔)
一眼狀壓dp
根據小資料先寫了部分分 (數學計算)
根據n*m<40 顯然可進行dp m,n的交換對結果無影響 但是我推不出狀態轉移方程。
得分30
後來聽說可以手推答案後陣列記錄 以及用類似開關的思路驗證做 狀壓該題比較不好寫…
t5奶牛大聚會
基本上是樹形dp裸題 求樹上乙個點到其他店的距離之和最小
只要看出來真的裸題 **和除錯都很快 ac。
最後得分 64+100+10+30+100=304,總體而言沒犯低階錯誤 考試的時候心態還算不錯 考試中**優化重構基本順利 發揮出了正常水平。
狀壓DP初探 總結
2018過農曆新年這幾天,學了一下狀態壓縮動態規劃,現在先總結一下。狀態壓縮其實是一種並沒有改變dp本質的優化方法,階段還是要照分,狀態還是老樣子,決策依舊要做,轉移方程還是得列,最優還是最優,無後還是無後,所以它比較好理解。狀壓,顧名思義就是要將一些狀壓想辦法壓縮起來 可以壓,也可以刪 其中這些狀...
狀壓DP的總結
狀壓dp的標誌 資料小 通過題目所給出的條件以後得到的特徵集合小 一 cf259div2 d 題目大意 保證b i 中每個數互質,給出a i 然後求1 n的abs a i b i 最小。a i 30 思路 首先得到b i 必然小於60。這個很重要,因為我們列舉的b的集合就是60.首先當b如果都取1,...
狀壓dp 玉公尺田 狀壓dp
相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...