以下内容来自ShallWe's Blog

题目

题目链接

Description


Input

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

Output

仅包含一行,即为 $\Sigma_{i=1 \to k}{Ai^2} (\mod 1024523)$。

【大致数据规模】

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

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

解题报告

现场所有人齐刷刷懵逼了,听sunshine学长爆完标算都吃起了面前的键盘。
首先,有一个残酷的事实是,我们无法在一个合适的复杂度中求出\(a[i]\) ,这一点很明确。所以下手点应该是将\(\Sigma_{i=1 \to k}{Ai^2}\bf\) 的转化。


实际上,\[\Sigma_{i=1 \to k}{Ai^2}\bf\] 有这样一个含义,想象出两个人在玩这个游戏,\(a[i]^2\bf\) 可以认为是第一个人选出\(a[i]\bf\)的方案数乘上第二个人选出\(a[i]\bf\) 的方案数,那最后需要统计的答案是什么?
两个人选择相同序列的情况数
感受一下,我们来设计dp
令\[f[i][j][k]\bf\] 表示取\(i\)个字符,两个人分别在上方取到\(j\),\(k\),相同的情况数。
转移看下代码

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int P=1024523;
const int N=510;
int f[2][N][N],n,a[N],b[N],m;
char s1[N],s2[N];
int main(){  scanf("%d%d",&n,&m);scanf("%s",s1);scanf("%s",s2);for (int i=0;i<n;i++)a[n-i]=s1[i]-'A';for (int i=0;i<m;i++)b[m-i]=s2[i]-'A';f[0][0][0]=1;for (int i=0;i<n+m;i++){int t=i%2;for (int j=0;j<=n&&j<=i;j++)for (int k=0;k<=n&&j<=i;k++)if (f[t][j][k]){if (a[j+1]==b[i-k+1]) (f[!t][j+1][k]+=f[t][j][k])%=P;if (b[i-j+1]==a[k+1]) (f[!t][j][k+1]+=f[t][j][k])%=P;if (b[i-j+1]==b[i-k+1]) (f[!t][j][k]+=f[t][j][k])%=P;if (a[j+1]==a[k+1]) (f[!t][j+1][k+1]+=f[t][j][k])%=P;f[t][j][k]=0;        }}cout<<f[(n+m)%2][n][n];return 0;
}

转载于:https://www.cnblogs.com/ShallWe2000/p/5762215.html

Bzoj 1566: [NOI2009]管道取珠(动态规划-神题)相关推荐

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

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

  2. [NOI2009]管道取珠

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

  3. BZOJ1566 [NOI2009]管道取珠

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

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

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

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

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

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

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

  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. 【组队学习】【35期】数据可视化(Matplotlib)
  2. simple-android-flux,深入浅出Flux
  3. scanf从文件中读入,printf写入到文件
  4. 字节顺序:高位优先(big-endian)和低位优先(little-endian)
  5. 想成为嵌入式程序员应知道的0x10个基本问题
  6. 【2012百度之星资格赛】G:聊天就是Repeat
  7. 计算机安全原理与实践_《计算机图形学原理及实践》学习笔记之第三章
  8. java.util.Properties
  9. 最优隐神经元数目 算法 matlab,BP算法的改进在Matlab的实现研究
  10. Centos6.3安装KVM
  11. IntelliJ IDEA 2020 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
  12. 计算机网络面经八股文
  13. 学会有礼貌的拒绝应聘者
  14. 关于转换JSON列表错误导致结果出错的问题
  15. 轻量级自动化测试框架 UFT 初学者 学习编写
  16. 熔断机制什么意思_[财经]熔断机制的由来介绍 熔断机制什么意思 - 南方财富网...
  17. 柿饼模组 -- 实现超声波模块测距显示界面
  18. 类图 顺序图 活动图 状态图 用法和比较
  19. 2509 Problem H:奇怪的分式
  20. HTML span 标签 的详细用法

热门文章

  1. Java 并发数据结构
  2. 【python】filter()函数
  3. iphone分辨率_揭示真实的手机屏幕大小和分辨率
  4. 【mysql基础知识】解决java连接mysql时将localhost改为本机的ip地址后失败问题
  5. 无连接可靠传输_FPC连接器的特点以及弹片微针模组的作用
  6. nrf52832芯片资料_蓝牙大举进军智能楼宇、智慧工业等新兴领域,主流BLE芯片哪家强...
  7. php jwt怎么保存再客户端,php – 如何将JWT添加到授权标头?
  8. mysql 创建和删除库_mysql入门系列:mysql创建、删除和选择数据库
  9. pca主成分分析_降维:主成分分析(PCA)
  10. java solr5.2_solr5.2.1-----环境搭建