一个小 Trick

平方变两次

一个状态 S 有一个贡献,所有状态 S 组成集合 U .

然后我们要统计下面这个东西

ans=SUf2(S)

然后我们就可以看作是选两个 U 里的 S1,S2,然后 S1=S2 的方案数 .

这样就把一个带平方的贡献问题转化成一个简单的选择了 .

让我们看一个实例:

NOI2009 管道取珠

两个字符串 S,T .

整一个仅含 1,2 的序列 {a},用以下步骤生成一个字符串 U

  • 扫描序列 {a} .
  • 目前扫到了 x
    • 如果 x1,从 S 的末尾拿一个字符放到 U 的开头,然后把 S 末尾那个字符删了 .
    • 如果 x2,从 T 的末尾拿一个字符放到 U 的开头,然后把 T 末尾那个字符删了 .

然后最后 S,T 都删没了得到的 U 就是生成出来的字符串 .

所有只有 n1m2 的序列是合法的 .

f(X) 为序列 X 能被多少给合法序列生成 .

Xf2(X)

1024523 取模 .

1n,m500 .

题解:

平方变两次,于是变成生成两次生成了相同的串的方案数 .

直接大力普及组 DP,令 dpi,j,k,l 表示第一次 Si 个,Tj 个;第一次 Sk 个,Tl 个的答案 .

然后轻松转移把 .

显然 i+j=k+l,于是可以滚掉一维度 .

于是这道题就被 O(n2m) 解决了 .

一些类似的题目:

posted @   yspm  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
😅​
点击右上角即可分享
微信分享提示