8 15校內測試 佇列 manacher

2022-05-16 02:59:27 字數 2762 閱讀 4572

dp??不能確定轉移狀態。考慮用優先佇列儲存最優決策點,可是發現當前選擇最優不能保證最後最優,在後面可以將之前用過的替換過來。

比如資料:

3 54 6

只儲存a[i]來決策不能延展到後面的狀態,因此每次選擇過後把b[i]加入佇列,下次選擇最優時如果選擇到了b[i],則表示用之前選擇過的來替換到當前狀態。

這裡我開了兩個優先佇列。

記錄字首和,可以發現,從某乙個點為起點時,向後延展出去的長度中一定有i到i+s這一段,所以用字首和最大值建一棵線段樹,每次查詢i+s-1到i+e-1段的最大值,減去i-1的字首和比較答案即可。

關鍵時候manacher忘了怎麼寫!!先manacher一遍處理出以每個點為中心點的最長回文串長度,一定是奇數。開桶記錄每個長度出現次數,從大到小列舉長度l,每次把l-2的次數加上l的次數,因為l的長度滿足回文串l-2一定滿足(同一中心點,注意k要開long long!

1 #include2 #include3

#define ll long long

4#define mod 19930726

5using

namespace

std;

67 ll max_r[2000005];8

intn;

9ll k;

10 ll ans = 1, flag[1000005

];11

12char m[2000005], a[1000005

];13

14 inline ll min ( ll a, int

b )

1718

ll mi ( ll a, ll b )

2425

void

manacher ( )

31 m[2 * n + 1] = '

#'; m[2 * n + 2] = '$'

;32int center = 0; ll mx = 0;33

int side = n * 2 + 1;34

for ( int i = 1; i <= n * 2 + 1; i ++) 41}

42}4344

intmain ( )

56 ll pos =ma;

57while ( k > 0

) 63 printf ( "

%i64d

", ans );

64return0;

65 }

校內測試 城堡

矩陣中求左上角的點到右下角的點的距離,不能從下往上走 方案1 動規 初步判定演算法 對於這題,只能從上往下行走,對於到達每乙個點的最優值,一定是從最上方下來的最優值,與左右兩邊最優值的比較,初步確定演算法動態規劃 分析初步演算法 對於從兩邊來的最優值,只有左邊目前是一路dp過來的最優值,而對於右邊則...

校內測試 祖先(DP)

首先這個題顯然是應該考慮字元合併,一開始看到這個題的時候想到了某個名字就叫做 字元合併 的撞鴨dp題目。但是那個題和這個題還是有很多不同的地方的,首先這個題可能合併到最後串長仍然很大所以肯定不能撞鴨,並且合併過的字元可能還可以繼續合併,所以好像有點gg。然而這個題可以用某種叫做 看資料範圍猜做法 l...

8 28校內測試 區間DP

感受到了生活的艱辛qaq.這才是真正的爆錘啊.因為t1t3還沒有理解所以只能貼t2叻qaq 區間dp.爆哭把題理解錯了,以為隨著拿的東西越來越多,斷點也會越來越多,出現可以選很多的情況qaq,然而是不會的,自始至終只會有乙個斷點,哥哥和妹妹取都只有兩個方向,而妹妹還是強制選擇的qaq。所以把環展開就...