题目



输入格式

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

输出格式

仅包含一行,即为 Sigma(Ai^2) i从1到k 除以1024523的余数。

输入样例

2 1

AB

B

输出样例

5

提示

样例即为文中(图3)。共有两种不同的输出序列形式,序列BAB有1种产生方式,而序列BBA有2种产生方式,因此答案为5。

【大致数据规模】

约30%的数据满足 n, m ≤ 12;

约100%的数据满足n, m ≤ 500。

题解

一开始看题很是懵B

各种相同取法数量的平方之和= =

可以这样想,假如有两人各玩一次,其中一种取法个数为x,第一个人会从x种取法种选一种取,第二个人也从x个取法中选一个取,总共方案不就是\(x^2\)?

问题不就转化成了:两个人取球,取得相同结果的方案数

设\(f[i][j][k]\)表示取i个球,①号取了上边j个,②号取了上边k个,结果相同的方案数

转移就很简单了,看代码吧

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 505,maxm = 100005,INF = 1000000000,P = 1024523;
int f[2][maxn][maxn],n,m,N;
char L[maxn],R[maxn];
int main(){
scanf("%d%d%s%s",&n,&m,L + 1,R + 1); N = n + m;
for (int i = 1; i <= (n >> 1); i++) swap(L[i],L[n - i + 1]);
for (int i = 1; i <= (m >> 1); i++) swap(R[i],R[m - i + 1]);
f[0][0][0] = 1; int p = 0;
for (int i = 0; i < N; i++,p ^= 1)
for (int j = 0; j <= n && j <= i; j++)
for (int k = 0; k <= n && k <= i; k++){
int F = f[p][j][k];
if (L[j + 1] == L[k + 1])
f[p ^ 1][j + 1][k + 1] = (f[p ^ 1][j + 1][k + 1] + F) % P;
if (R[i - j + 1] == R[i - k + 1])
f[p ^ 1][j][k] = (f[p ^ 1][j][k] + F) % P;
if (L[j + 1] == R[i - k + 1])
f[p ^ 1][j + 1][k] = (f[p ^ 1][j + 1][k] + F) % P;
if (R[i - j + 1] == L[k + 1])
f[p ^ 1][j][k + 1] = (f[p ^ 1][j][k + 1] + F) % P;
f[p][j][k] = 0;
}
printf("%d\n",f[p][n][n]);
return 0;
}

BZOJ1566 [NOI2009]管道取珠 【dp】的更多相关文章

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

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

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

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

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

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

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

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

  5. [NOI2009]管道取珠 DP + 递推

    ---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某 ...

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

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

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

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

  8. NOI2009 管道取珠 神仙DP

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

  9. BZOJ 1566 管道取珠(DP)

    求方案数的平方之和.这个看起来很难解决.如果转化为求方案数的有序对的个数.那么就相当于求A和B同时取,最后序列一样的种数. 令dp[i][j][k]表示A在上管道取了i个,下管道取了j个,B在上管道取 ...

随机推荐

  1. SOA架构,dubbo,Zookeeper

    1. 分析 由于项目是基于soa的架构,表现层和服务层是不同的工程.所以要实现查询需要两个系统之间进行通信. 如何实现远程通信? 1.Webservice:效率不高基于soap协议.项目中不推荐使用. ...

  2. R+hadoop

    这里面的配置 http://www.rdatamining.com/big-data/r-hadoop-setup-guide root@kali:~/hadoop_home/hadoop-1.2.1 ...

  3. C# checked运算符

    一.C# checked运算符 checked运算符用于对整型算术运算和显式转换启用溢出检查. 默认情况下,表达式产生的值如果超出了目标类型的范围,将会产生两种情况: ?常数表达式将导致编译时错误. ...

  4. Oracle数据库学习(二)

    2.用SQL进行多表查询 (1)无条件多表查询 笛卡尔集:总记录数=table1记录数×table2记录数 select * from table1, table2 (2)等值连接 内连接:selec ...

  5. 学习笔记(七): Logistic Regression

    目录 Calculating a Probability Model Training 1.Loss function for Logistic Regression 2.Regularization ...

  6. 水平垂直居中图片及文字(兼容IE6+)实例

    直接看代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...

  7. JavaScript算数

    常数                              Math.E 圆周率                           Math.PI 2的平方根                  ...

  8. (ADO.NET小知识点汇总)看到什么记什么

    1.数据库连接池:在同时连接数不多的情况下, 打开一个链接往数据库导1W条数据的耗时 跟 导一条数据就打开跟关闭数据库连接的耗时 两者其实相差不大,这是为什么呢?打开关闭的本身不是有很多耗时吗?这是因 ...

  9. mysql插入、修改、删除

    联合查询: union:合并.联合,将多次查询结果合并成一个结果 语法: 查询语句1: union[all] 查询语句2: union [all] ... 意义 1.将一条比较复杂的查询语句可拆分成多 ...

  10. laravel5.2总结--redis使用

    一切的前提都是已经安装好了redis服务器,并且能启动(我只总结了mac的安装方法:传送门) 我自己使用的是mac系统,有个教程可以参考下,传送门: 1.安装PHP PRedis 1>PRedi ...