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=;
const int p=;
int n,m;
int f[][N][N];
char s[][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[]+,s[]+);
for(int i=;i<=n/;i++)swap(s[][i],s[][n-i+]);
for(int i=;i<=m/;i++)swap(s[][i],s[][m-i+]);
f[][][]=;int now=;
for(int i=;i<n+m;i++){
now^=;
for(int j=;j<=n&&j<=i;j++){
for(int k=;k<=n&&k<=i;k++){
if(s[][j+]==s[][k+])
f[now][j+][k+]=mod(f[now][j+][k+],f[now^][j][k]);
if(s[][i-j+]==s[][i-k+])
f[now][j][k]=mod(f[now][j][k],f[now^][j][k]);
if(s[][j+]==s[][i-k+])
f[now][j+][k]=mod(f[now][j+][k],f[now^][j][k]);
if(s[][i-j+]==s[][k+])
f[now][j][k+]=mod(f[now][j][k+],f[now^][j][k]);
f[now^][j][k]=;
}
}
}
printf("%d\n",f[now][n][n]);
return ;
}

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

+本文作者:luyouqi233。               +

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

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

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

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

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

  2. bzoj1566: [NOI2009]管道取珠 DP

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1566 思路 n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平 ...

  3. bzoj1566 [NOI2009]管道取珠——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1566 一眼看上去很懵... 但是答案可以转化成有两个人在同时取珠子,他们取出来一样的方案数: ...

  4. [bzoj1566][NOI2009]管道取珠

    来自FallDream的博客,未经允许,请勿转载,谢谢. n<=500 神题...... 发现这个平方可以看作两个序列相同的对数  然后就可以表示状态了. f[i][j][k]表示两个序列各选了 ...

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

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

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

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

  7. 【题解】NOI2009管道取珠

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

  8. NOI2009 管道取珠 神仙DP

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

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

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

随机推荐

  1. steam账号分享工具、迅游账号分享工具说明:

    steam账号分享工具.迅游账号分享工具说明: 用于网吧经营者将自己购买的迅游加速器账号或者是steam平台账号免费分享给有需要的网吧顾客使用. steam账号分享工具.迅游账号分享工具由“服务端”和 ...

  2. 一次简单的C++编译错误

    快要下班的时候,开发部的一名小鲜肉找我帮忙解决一个问题: 才哥,我们提供给计费组的库在计费主机上编译报错了,但是提供给其他组用时没有编译报错.计费也不认,说编译器报的是我们代码上的错误,要我解决,帮我 ...

  3. Java多线程之volatile与synchronized比较

    可见性: JAVA内存模型: java为了加快程序的运行效率,对一些变量的操作是在寄存器或者CPU缓存上进行的,后面再同步到主存中 看上图,线程在运行的过程中,会从主内存里面去去变量,读到自己的空间内 ...

  4. Java开发工程师(Web方向) - 03.数据库开发 - 第1章.JDBC

    第1章--JDBC JDBC基础 通过Java Database Connectivity可以实现Java程序对后端数据库的访问 一个完整的数据库部署架构,通常是由客户端和服务器端两部分组成 客户端封 ...

  5. 利用爬虫、SMTP和树莓派3B发送邮件&续集&(爬取墨迹天气预报信息)

    -----------------------------------------------学无止境----------------------------------------------- 前 ...

  6. leetcode-二进制手表

    二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59). 每个 LED 代表一个 0 或 1,最低位在右侧. 例如,上面的二进制手表读取 “3:25”. ...

  7. 重装win10后ubuntu引导项修复

    问题描述:原来是在win7下装了ubuntu14的双系统,后台win7换win10,然后使用EasyBCD进行引导项修复时,不好使,报 error file: /boot/grub/i386-pc/n ...

  8. 如果Python对于磁盘没有写入权限,还会运行吗?

    Python如果对于磁盘没有写入权限,那么编译成功的字节码文件就只会存储在内存当中,而不会写入到磁盘,每次运行Python都会重新编译,然后运行.

  9. 百度编辑器ueditor的图片地址修正

    我用的百度编辑器为1.4.2的,相对于现在这个时间来说是比较新的.之前去的1.3版的,后来更新到1.4之后出现路径问题.因为今天晚上出现特别奇怪的问题,所以特地又整了一遍,发现这玩意还是得自己弄通了好 ...

  10. LintCode-212.空格替换

    空格替换 设计一种方法,将一个字符串中的所有空格替换成 %20 .你可以假设该字符串有足够的空间来加入新的字符,且你得到的是"真实的"字符长度. 你的程序还需要返回被替换后的字符串 ...