方便后来的学弟学妹们改题和理解,顺便纪念自己这两周的奋斗
备注:10-12年的大部分由于本人懒没有做,所以会有残缺
历年的第一题往往是水题,就不提了
高精输出 2 ( n 2 ) 2^{(n^2)} 2(n2),最好用快速幂或压位优化
拓扑排序判环,直接在DAG上dp, f x = m a x { f y } + 1 f_x=max\{f_y\}+1 fx=max{fy}+1,若 x x x无子节点 f x = 100 f_x=100 fx=100
f i f_i fi表示 i − 1 i-1 i−1时刻空闲, i i i时刻的最小工作时间,若有时间,则 f i + t j = m i n { f i + t j , f i + t j } f_{i+t_j}=min\{f_i+t_j,f_{i+t_j}\} fi+tj=min{fi+tj,fi+tj},无时间则 f i + 1 = m i n { f i } f_{i+1}=min\{f_i\} fi+1=min{fi}
高精乘高精
可以枚举端边跑 d i j dij dij,这样是 O ( n 4 ) O(n^4) O(n4)【可以用堆优化一个log】,也可以先 f l o y d floyd floyd再枚举断边 O ( n 3 ) O(n^3) O(n3)
f i , j f_{i,j} fi,j表示以 i , j i,j i,j为右下角的最大正方形边长,若 i , j i,j i,j合法, f i , j = m i n { f i − 1 , j − 1 , f i − 1 , j , f i , j − 1 } + 1 f_{i,j}=min\{f_{i-1,j-1},f_{i-1,j},f_{i,j-1}\}+1 fi,j=min{fi−1,j−1,fi−1,j,fi,j−1}+1,另 A n s f i , j + + Ans_{f_{i,j}}++ Ansfi,j++,做后缀和 A n s i = A n s i + A n s i + 1 Ans_i=Ans_i+Ans_{i+1} Ansi=Ansi+Ansi+1即可得到答案数组
开个桶统计即可
f i , j f_{i,j} fi,j表示划分完前 i i i位,最后一段长度为 j j j的最小代价,记 g i g_i gi表示 f i f_i fi中的最小值,则 f i , j = g i − j + 12 + m a x { a i . . . j } f_{i,j}=g_{i-j}+12+max\{a_{i...j}\} fi,j=gi−j+12+max{ai...j},由于长度最长为255,所以能过
可以让每个点的长度加上一个极大的数,最后再%掉,这样子它会优先最短再廉价,随便一种最短路算法都行
对于两个串 a , b a,b a,b,若 a + b > b + a a+b>b+a a+b>b+a,则 a a a排到前面
b f s bfs bfs
设 f i , j f_{i,j} fi,j表示前 i i i本书保留 j j j本,初态 f i , 1 = 0 f_{i,1}=0 fi,1=0,转移 f i , j = m i n { f k , j − 1 + a b s ( a i − a k ) } f_{i,j}=min\{f_{k,j-1}+abs(a_i-a_k)\} fi,j=min{fk,j−1+abs(ai−ak)},终态 A n s = m i n { f i , n − m } ( i ≥ n − m ) Ans=min\{f_{i,n-m}\}(i\geq n-m) Ans=min{fi,n−m}(i≥n−m)
d f s dfs dfs,注意预处理接上后长度变化
可以拓扑,也可以直接匹配(毕竟数据弱,要求低)
可以折半搜 O ( 2 n 2 ) O(2^{\frac n2}) O(22n),也可以转换成背包方案数 O ( n 2 ) O(n^2) O(n2)
快速幂,由于出题人傻逼,不用写扩展欧拉定理
设 f i , j f_{i,j} fi,j表示第一个串做完了 1 ∼ i 1\sim i 1∼i,第二个串做完了 1 ∼ j 1\sim j 1∼j,初态显然 f i , 0 = i K , f 0 , i = i K f_{i,0}=iK,f_{0,i}=iK fi,0=iK,f0,i=iK,转移 f i , j = m i n { f i − 1 , j − 1 + a b s ( s 1 i − s 2 j ) , m i n { f i − 1 , j , f i , j − 1 } + k } f_{i,j}=min\{f_{i-1,j-1}+abs(s1_i-s2_j),min\{f_{i-1,j},f_{i,j-1}\}+k\} fi,j=min{fi−1,j−1+abs(s1i−s2j),min{fi−1,j,fi,j−1}+k},终态 f n , m f_{n,m} fn,m
利用城市按照序号开放的性质,联想到 f l o y d floyd floyd第三维(开放城市),可以边做边弄,也可以做完之后二分
d f s dfs dfs暴搜,注意搜索顺序可以改变
08T3弱化版,不用拓扑判环也行( d f s dfs dfs)
f i , j = m i n { f i , k + f k , j + v i , j } f_{i,j}=min\{f_{i,k}+f_{k,j}+v_{i,j}\} fi,j=min{fi,k+fk,j+vi,j}
题目描述有问题!!!大括号可以包括大括号,中括号小括号同理
设 f i , j f_{i,j} fi,j表示前 i i i个城市建了 j j j所学校,初态 f 1 , i = v a l ( 1 , i ) f_{1,i}=val(1,i) f1,i=val(1,i), f i , j = m i n { f k − 1 , j − 1 + v a l ( k , i ) } f_{i,j}=min\{f_{k-1,j-1}+val(k,i)\} fi,j=min{fk−1,j−1+val(k,i)}
v a l val val复杂度是 n 2 n^2 n2的,这样子复杂度是 n 5 n^5 n5级别的,不过跑不满所以可以过,当然你可以对 v a l val val记忆化,这样其最多跑 n 2 n^2 n2,复杂度就变成了 n 3 n^3 n3
n 2 n^2 n2暴力循环可以接上的模板
被包含的专家,尊贵的专家(只有ta能解决某一个问题),最优性
以上三个剪枝一起上可以过
提高组原题,并查集求基环树最小环
没做出来,听大佬说是拓扑
b f s bfs bfs
本人写了一个比较次的 d p dp dp 70分, f i = m i n { f j + v a l ( j + 1 , i ) } f_i=min\{f_j+val(j+1,i)\} fi=min{fj+val(j+1,i)}
正解暂时不会
提高组原题,每个点保留最大值次大值即可
有问题可以在下方评论区问作者
制作不易,转载需告知