2018/2/25

T1 小星星

  这个题开始先弄了一个20分的暴力,只要对于每一个点来枚举父亲就行了。 然后就是开始想链的部分分,弄了一个 f[i][j][k], i 表示状压所用过的标号,集合,然后 j,k 表示这条链的两个端端点,然后枚举子集来转移,但是时间复杂的事过不了的。 然后再最后30min 想到链的做法可以直接用f[i][j]来DP,i 还是表示用了哪些标号,j表示当前这条链的开头是谁,然后枚举这条链由开头能拓展到谁就好了。

  然后又80分的暴力做法就是,设计数组f[i][j][k] 表示在 i 这个节点用 j 这个标号,然后当前他的子树里用了 k 这个集合的标号,然后就是暴力转移,转移的时候暴力枚举儿子的状态,然后复杂度就是O(n^3*(2^2n))的这个其实可以拿到50分,然后我们可以发现,在一个子树里,其实有用的状态非常的少,且有用的状态中1的个数就是其子树的大小,然后我们就可以直接开一个数组G[x][j]来记录1的个数有x个的状态都有谁,然后再枚举的时候就可以快很多,拿到70-80分

  然后正解是看到计数想容斥,就是可以考虑用n个标号来对新图上的点随便标,不一定所有的标号都用,只要保证新图中相连的点在旧图中有边就行了。假设现在我们最多用了n-1个点,那么至少有一对点用了相同的标号,然后我们枚举每一中选标号的方案,然后进行一次树DP,再进行容斥就好了。

T2 神秘门

  莫比乌斯反演?

  就是知道一个式子 phi[i*j]=phi[i]*phi[j]*gcd(i,j) / phi[gcd(i,j)],然后推一推就好了

T3 黄昏下的礼物

  40分的暴力: 因为这是一个回文串,那么我们构造一半就能得到整个的串,那么用f[i][l][r] 表示构造到第 i 位,对于原串来说,从左往右匹配到长度是 l 位,从右到左匹配到长度是 r 的方案数,如果是偶数长度的话,ans+=f[N/2][l][r] (l+r>=N), 奇数长度的话就是ans+=f[N/2][l][r]*26(l+r>N),ans+=f[N/2][l][r](l+r==N)

  正解的话,也是类似的构造一个大的自动机,然后矩阵乘优化,具体的话比较麻烦,不多写了。

posted @ 2018-02-27 12:12  Nawox  阅读(188)  评论(0编辑  收藏  举报