BZOJ1566 [NOI2009]管道取珠 【dp】
题目


输入格式
第一行包含两个整数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】的更多相关文章
- bzoj1566: [NOI2009]管道取珠 DP
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1566 思路 n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平 ...
- bzoj1566 [NOI2009]管道取珠——DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1566 一眼看上去很懵... 但是答案可以转化成有两个人在同时取珠子,他们取出来一样的方案数: ...
- Bzoj 1566: [NOI2009]管道取珠(DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1558 Solved: 890 [Submit][Status ...
- BZOJ.1566.[NOI2009]管道取珠(DP 思路)
BZOJ 洛谷 考虑\(a_i^2\)有什么意义:两个人分别操作原序列,使得得到的输出序列都为\(i\)的方案数.\(\sum a_i^2\)就是两人得到的输出序列相同的方案数. \(f[i][j][ ...
- [NOI2009]管道取珠 DP + 递推
---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某 ...
- [bzoj1566][NOI2009]管道取珠
来自FallDream的博客,未经允许,请勿转载,谢谢. n<=500 神题...... 发现这个平方可以看作两个序列相同的对数 然后就可以表示状态了. f[i][j][k]表示两个序列各选了 ...
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MBSubmit: 1659 Solved: 971 Description In ...
- NOI2009 管道取珠 神仙DP
原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...
- BZOJ 1566 管道取珠(DP)
求方案数的平方之和.这个看起来很难解决.如果转化为求方案数的有序对的个数.那么就相当于求A和B同时取,最后序列一样的种数. 令dp[i][j][k]表示A在上管道取了i个,下管道取了j个,B在上管道取 ...
随机推荐
- appium---adb通过wifi连接手机
前几天接到领导的安排,想要测试下apk的耗电量,可以通过手机adb命令进行监控手机电量的变化:但是这样如果通过USB连接手机的话,USB就会自动给手机进行充电,无法达到我们想要的结果,于是想到了通过w ...
- WebAppBuilder独立于portal之arcgis for js应用框架研究之二
WAB采用ArcGIS JavaScript for API作为地图开发底层,采用Web AppBuilder作为开发框架,利用该框架即拿即用的Widget来构建应用,比如制图.查询.地理处理.编辑. ...
- git与github账号建立SSH连接
第1步:创建SSH Key.在用户主目录下,(就是在你的工作空间一层)看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步 ...
- HTTP 配置与编译安装
目录 HTTP 配置与编译安装 HTTP 相关配置 DSO 定义'Main' Server 的文档页面路径 定义站点主页面 站点访问控制常见机制 基于源地址实现访问控制 日志设定 设定默认字符集 定义 ...
- 【转】JSP提交表单
设计表单页面,它是静态页面,使用HTML编写,而且使用了JavaScript脚本语言来验证填写表单数据,表单页面为form.htm,代码如下: <html><head>< ...
- php中关于empty()函数是否为真的判断
<?php// $a = 0; ==> 符合empty,empty($a)为true// $a = '0'; ==> 符合empty,empty($a)为true// $a = ...
- DAG上的动态规划——嵌套矩阵问题
问题描述:有n个矩形,每个矩形可以用两个整数a,b描述,表示它的长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d,或者b<c,a<d(相当于把矩形X旋 ...
- 51nod_1459 最短路 dijkstra 特调参数
好多基础知识都没补完,只好看到.用到一个赶紧补全一个,并且保证下次需要的时候直接用,不用回来再补: 其实这个算法是在补同余最短路的时候用到的,当时突然发现理解算法导论上的原理甚至有效性证明,但是就是没 ...
- Python文件与异常处理
文件读写 使用python的BIF(build in function)open()进行文件读写操作 # 1.打开文件 data = open(file_name,'w') # 读取模式有很多种,主要 ...
- 4 Template层-验证码
1.验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 官网 ...