题意:

有点复杂,看 原题面 吧。

思路

发现可以等价为两个人独立操作操作出来的序列相同的方案数。

然后发现复杂度阈值可以接受 \(n^3\),因此直接套路地设 \(f_{t,i,j}\) 表示两个人操作了 \(t\) 次后第一个人操作了第一个管道 \(i\) 次,第二个人操作了第一个管道 \(j\) 次的方案数。

这么设计状态的原因是只有两个人操作次数相同才有可能操作出来序列相同,而第二个管道的操作次数在总次数确定的情况下被唯一确定。

然后就是正常的分类讨论,看当前第一个人的管道与第二个人的管道的球有没有对位相等,如果相等就从那里转移过来,然后就做完了。

code

需要注意的是 \(i\) 与 \(j\) 可以取到0。

同时空间开不下 \(n^3\) 的数组,需要写滚动数组。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=505,p=1024523;
int n,m,f[3][N][N];
char a[N],b[N];
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=m;i++) cin>>b[i];
f[0][0][0]=1;
for(int t=1;t<=n+m;t++){
int lst=(t-1)%2,now=lst^1;
for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) f[now][i][j]=0;
for(int i=max(0ll,t-m);i<=min(n,t);i++){
for(int j=max(0ll,t-m);j<=min(n,t);j++){
if(i>0&&j>0&&a[i]==a[j]) f[now][i][j]=(f[now][i][j]+f[lst][i-1][j-1])%p;
if(i>0&&a[i]==b[t-j]) f[now][i][j]=(f[now][i][j]+f[lst][i-1][j])%p;
if(j>0&&b[t-i]==a[j]) f[now][i][j]=(f[now][i][j]+f[lst][i][j-1])%p;
if(b[t-i]==b[t-j]) f[now][i][j]=(f[now][i][j]+f[lst][i][j])%p;
}
}
}
cout<<f[((n+m)%2)][n][n];return 0;
}

P1758 [NOI2009] 管道取珠 题解的更多相关文章

  1. BZOJ1566:[NOI2009]管道取珠——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目 ...

  2. luogu P1758 [NOI2009]管道取珠

    luogu 这个题中的平方有点东西,考虑他的组合意义,也就是做这个过程两次,如果两次得到的结果一样就给答案+1,所以可以考虑dp,设\(f_{i,j,k,l}\)表示第一个过程中上面取到的第\(i\) ...

  3. P1758 [NOI2009]管道取珠

    考虑这个式子的意义. 不妨看做进行了两轮操作,这个式子显然等价于两次操作后得到的序列相同的方案数. 这个东西显然是可以dp的. 随便优化一下就成了O(n^3)

  4. 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)

    1566: [NOI2009]管道取珠 Time Limit: 20 Sec  Memory Limit: 650 MBSubmit: 1659  Solved: 971 Description In ...

  5. Bzoj 1566: [NOI2009]管道取珠(DP)

    1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1558 Solved: 890 [Submit][Status ...

  6. 【题解】NOI2009管道取珠

    又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...

  7. NOI2009 管道取珠 神仙DP

    原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...

  8. BZOJ.1566.[NOI2009]管道取珠(DP 思路)

    BZOJ 洛谷 考虑\(a_i^2\)有什么意义:两个人分别操作原序列,使得得到的输出序列都为\(i\)的方案数.\(\sum a_i^2\)就是两人得到的输出序列相同的方案数. \(f[i][j][ ...

  9. BZOJ1566 [NOI2009]管道取珠 【dp】

    题目 输入格式 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串, ...

  10. 1566: [NOI2009]管道取珠 - BZOJ

    Description Input第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行 ...

随机推荐

  1. C# Web下的类库 项目中获取程序的运行路径

    System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase

  2. 面试题40. 最小的k个数

    地址:https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/ <?php /** * 面试题40. 最小的k个数 * 输入整数数组 ...

  3. 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!

    前言 在人工智能技术日新月异的今天,DeepSeek-R1模型以其卓越的性能和广泛的应用场景,成为了众多用户心中的明星模型.它不仅具备强大的日常写作.翻译.问答等基础功能,更引入了独特的深度思考模式, ...

  4. vue强制刷新页面

    方法一 this.$router.go(0) // 会出现一段空白页,用户体验不好 方法二 在 app.vue 中定义 reload() 方法 <template> <div id= ...

  5. 200条Git命令复习总结使用

    新建 创建一个新的 git 版本库.这个版本库的配置.存储等信息会被保存到.git 文件夹中 # 初始化当前项目 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init ...

  6. linux 下给网卡添加ipv6、路由

    route命令的使用举例如下:   route // 显示路由信息.   route add –host 192.168.1.110 dev eth0  // 给网卡eth0的路由表中加入新地址192 ...

  7. oracle忘记sys,system密码的解决方法

    1. 找到oracle的安装目录: 找到此路径(D:\app\Administrator\product\11.2.0\dbhome_1\BIN),通过sqlplus.exe执行操作命令.(如果提示s ...

  8. 【Java】枚举类和注解

    一.枚举类的使用 1. 枚举类的说明: 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 当需要定义一组常量时,强烈建议使用枚举类 枚举类的实现: JDK 5.0以前需要自定义 JDK 5 ...

  9. ASP.NET MVC 视图中文乱码

    以 Visual Studio 2017 Community 为例. 场景重现 某天新建了一个ASP.NET MVC项目,添加了一个视图文件写了个页面,页面内容中自然有中文, 字符集编码为<me ...

  10. javascript for...in

    在JS中我们最常见的循环语句是for循环语句,一个简单的for循环语句如下: for(var i = 0, n = 100; i < n; i++){ // to do somethings . ...