https://www.lydsy.com/JudgeOnline/problem.php?id=1566

https://www.luogu.org/problemnew/show/P1758

题目见上。

这题听说是一个套路题啊……

如果我让A玩一次游戏,B再玩一次,所得到的序列相同的情况和就正好是我们所求的答案。

(比如说这款游戏有S种T序列,则A和B相同的次数显然为S*S正好就是题中给的式子。)

设f[i][j][k]为两人玩到了第i个珠子,A上管道拿了j个珠子,B上管道拿了k个珠子。

第一维滚走,那么就是一个很简单的dp了。

#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=505;
const int p=1024523;
int n,m;
int f[2][N][N];
char s[2][N];
inline int mod(ll x,int y){x+=y;if(x>=p)x-=p;return x;
}
int main(){scanf("%d%d",&n,&m);scanf("%s%s",s[0]+1,s[1]+1);for(int i=1;i<=n/2;i++)swap(s[0][i],s[0][n-i+1]);for(int i=1;i<=m/2;i++)swap(s[1][i],s[1][m-i+1]);f[0][0][0]=1;int now=0;for(int i=0;i<n+m;i++){now^=1;for(int j=0;j<=n&&j<=i;j++){for(int k=0;k<=n&&k<=i;k++){if(s[0][j+1]==s[0][k+1])f[now][j+1][k+1]=mod(f[now][j+1][k+1],f[now^1][j][k]);if(s[1][i-j+1]==s[1][i-k+1])f[now][j][k]=mod(f[now][j][k],f[now^1][j][k]);if(s[0][j+1]==s[1][i-k+1])f[now][j+1][k]=mod(f[now][j+1][k],f[now^1][j][k]);if(s[1][i-j+1]==s[0][k+1])f[now][j][k+1]=mod(f[now][j][k+1],f[now^1][j][k]);f[now^1][j][k]=0;}}}printf("%d\n",f[now][n][n]);return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9110893.html

BZOJ1566:[NOI2009]管道取珠——题解相关推荐

  1. BZOJ1566 [NOI2009]管道取珠

    这是一道思维复杂度很高的DP题 看题目,为什么是取两次序列一样呢?YY一下,其实等价于两个人一起取,最后序列一样. 然后就水了: 令f[i, j, k]表示取到第i个珠子,第一个人在1号管道取了j个珠 ...

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

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

  3. [NOI2009]管道取珠

    题目描述 管道取珠是小X很喜欢的一款游戏.在本题中,我们将考虑该游戏的一个简单改版.游戏画面如图1所示: (图1) 游戏初始时,左侧上下两个管道分别有一定数量的小球(有深色球和浅色球两种类型),而右侧 ...

  4. 洛谷P1758 [NOI2009]管道取珠(dp 贡献转化)

    题目 bzoj1566 两个管道的小球序列, 分别用长为n(n<=500)和长为m(m<=500)的仅由A和B构成的字符串表示 两个管道归并的时候,每次可以从上管道取一个球,也可以从下管道 ...

  5. 洛谷 - P1758 [NOI2009]管道取珠(计数dp)

    题目链接:点击查看 题目大意:给出两个长度分别为 n 和 m 的管道,每个管道中都只有两种颜色的珠子,现在可以按照规则组成序列,共可以组成 C( n+m , n ) 个序列,假设共组成了 K 种不同的 ...

  6. Bzoj 1566: [NOI2009]管道取珠(动态规划-神题)

    以下内容来自ShallWe's Blog 题目 题目链接 Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道 ...

  7. 牛客网 【每日一题】5月29日 管道取珠

    链接: 文章目录 题目描述 题意: 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld ...

  8. P1758-[NOI2009]管道取珠【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P1758 题目大意 给出一个大小为nnn和一个大小为mmm的栈,每次选择一个栈弹出栈顶然后记录这个字母,求所有弹出序 ...

  9. 2017.10.28 管道取珠 失败总结

    这个题有一个新套路:  ∑ai^2 要知道一般的计数题是∑ai,,所以这多乘了一个自己有什么意义呢? 于是想到,两两枚举,加起来正好是ai^2:: 所以就有一个想法,枚举两种取法, 然后就是插数dp, ...

最新文章

  1. java thread join_java中thread的join方法为什么能让线程插队
  2. java 编码二进制写法、十六进制用源代码表示
  3. Linux 系统必须掌握的文件_【all】
  4. Linux C 实现生产者消费者问题
  5. 基于DSP技术的多路语音实时采集与压缩处理系统
  6. CG CTF PWN When did you born?
  7. aop阻止方法运行_Spring AOP无法拦截内部方法调用
  8. 1006实验一实验报告
  9. 深入理解javascript之原型和原型链
  10. openssl ssl_write 写错误
  11. HBuilder git使用-建立仓库,邀请用户
  12. C++之继承探究(十一):多重继承、菱形继承、虚继承、二义性问题及其解决方案
  13. Eclipse中配置约束(DTD,XSD)
  14. GoFrame带你从0-1快速入门
  15. 营销数字化转型行业实践
  16. 物联网人工智能软件市场现状研究分析报告 -
  17. 圆通问题频发背后的“罪与罚”
  18. python中英文切换_Python方法完成转换英文字符操作
  19. 【程序设计基础与实验】地铁售票查询系统
  20. 逻辑回归 自由度_回归自由度的官方定义

热门文章

  1. php判断多维数组的技巧
  2. Eclipse中SVN的安装步骤(两种)和使用方法[转载]
  3. 8个开发必备的PHP功能
  4. 2.1.Linux系统下启动MySQL的命令及相关知识
  5. java的初始化顺序
  6. 更改IE的默认搜索引擎
  7. 传承德艺之馨——上海文联第八次代表大会侧记
  8. web压力测试工具ab安装及使用
  9. 【Java 基础篇】【第一课】HelloWorld
  10. linux内核参数优化