2019 OI总结

10.6

日常被肖比丘吊打。

10.5

上午改题,下午考试。
题目是提高组找的一些dp题。

过河

\(sort\),只有20。
\(s=t\)的情况特判一下,否则把距离超过100的相邻2个石头距离变成100,再直接跑\(dp\)就行了。

加分二叉树

我也记不得是第几次做了

树的划分

\(dp\)一下没想出来,就打了个\(195\times 5\)的表,过了。

这题其实是排列组合里的题,可以把一个数值为n的数当做n个小球,划分的份数k当做k个盒子,那么本题可以转化为“将n个小球放到k个盒子中,小球之间与盒子之间没有区别,并且最后的结果不允许空盒”
将n个小球放到k个盒子中的情况总数 =
a.至少有一个盒子只有一个小球的情况数
b.没有一个盒子只有一个小球的情况数
这样进行划分是因为这种分类可以使a和b都有能写出来的表达式:
a.因为盒子不加区分,那么1的情况数与“将n-1个小球放到k-1个盒子中”的情况数一样
b.没有一个盒子只有一个小球,那么把每个盒子中拿出来一个小球,对应的是“把(n-k)个小球放到k个盒子中的情况数”
然后将上面的思路化为动态转移方程:
设f[n,k]代表将n个小球放到k个盒子中且没有空盒的情况,那么f[n,k] = f[n-1,k-1] + f[n-k,k]
而当k=1时只有1种方法(小球全部放进1个盒子)

统计单词个数

我把状态设成了区间,强行让复杂度多了个\(n\)。其实只要设成前\(i\)个就行了。

邮票面值设计

纯暴力\(dfs\)+\(dp\),数据水就过了。

篝火晚会

答案就是转换成链以后最少的不匹配数。

10.4

上午考试,下午考试。

apple

贪心水题。

bags

我把所有方案全\(push\)\(vector\)里面了,事实上只要前\(k\)个。

mos

只写了个暴力

设T={a,b……c,d,e}(由小到大)
当前,将d与e移过去,有两种选择:
S1={e,a}{a}{d,a}{a}=e+a+d+a
S2={a,b}{b}{d,e}{a}=b+b+e+a
若S1<=S2,则移e(d的移动取决于c)否则将d,e一
起移过去,证明如下:
因为S1>S2,故第一步移e,那么第二步必然移动c,d:
S3={e,a}{a}{a,b}{b}{c,d}{a}=e+a+b+b+d+a,
S2’=S2+{a,c}{a}=b+b+e+a+c+a
S2’-S3=c-d<=0,故先移d,e更优。

tet

结论:设I在l与r出现,则I对应区间[l,r],则只有相互包含的区间会影响答案。
证明:假设相邻的相同数字不消除,那么每次交换只能消除一个逆序对,故总交换次数=逆序对个数。相邻数字消除只会影响包含该区间的区间。
所以,我们按区间大小进行处理,对于区间[l,r],需要交换次数为(l,r)内未消掉的元素个数。
使用树状数组维护即可。

sta

裸树的重心

abc

简单区间\(dp\),只是高精挂了。

kup

只写了个枚举顶行底行然后尺取的\(O(n^3)\)暴力。
xjc:

把值>k*2 作为断点,然后跑最大子矩阵(悬线法)就行了。

atr

考试时没有想到。
\(1,n\)还有那\(k\)个点分别跑一次\(Dijkstra\),然后建一个只含有这些点的完全图,在这上面跑状压\(dp\)即可。

naw

题解这么说:

F[i,j]表示对i至j添加括号的方案数,
G[i,j]表示将i至j全部取反后添加括号的方案数。
F[i,j]= ∑F[i,k-1]*G[k+1,j] {k∈[i,j],a[k]=’-‘}
G[i,j]= ∑G[i,k-1]*F[k+1,j] {k∈[i,j],a[k]=’-‘}
Ans=F[1,N-1]  时间复杂度n^3。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章