#模型转换,动态规划#洛谷 1758 [NOI2009] 管道取珠
分析
考虑每种情况的方案数平方之和,可以被转换成有两个人同时独立进行该游戏,问最后情况相同的方案数。
那么设 \(dp[i][j][k][o]\) 表示第一个人在上管道拿了 \(i\) 个,下管道拿了 \(j\) 个,第二个人上管道拿了 \(k\) 个,下管道拿了 \(o\) 个且操作情况相同的方案数。
可以发现 \(i+j=k+o\) 所以第四位可以被省略掉,同时第一位需要滚动数组,具体就是颜色相同就往后更新。
注意到 \(dp[i]\) 还会继续更新 \(dp[i]\),那么虚拟一个答案 \(dp[n+1][m][n][m+1]\),它必然只能由 \(dp[n][m][n][m]\) 更新。
代码
#include <cstdio>
#include <cstring>
using namespace std;
const int mod=1024523,N=511;
int n,m,dp[2][N][N]; char S[N],T[N];
void Mo(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
int main(){
scanf("%d%d%s%s",&n,&m,S+1,T+1);
dp[0][0][0]=1;
for (int i=0;i<=n;++i){
for (int j=0;j<=m;++j)
for (int k=0;k<=n;++k)
if (dp[i&1][j][k]){
int o=i+j-k;
if (o<0||o>m) continue;
if (T[j+1]==S[k+1]) Mo(dp[i&1][j+1][k+1],dp[i&1][j][k]);
if (T[j+1]==T[o+1]) Mo(dp[i&1][j+1][k],dp[i&1][j][k]);
if (S[i+1]==S[k+1]) Mo(dp[(i&1)^1][j][k+1],dp[i&1][j][k]);
if (S[i+1]==T[o+1]) Mo(dp[(i&1)^1][j][k],dp[i&1][j][k]);
dp[i&1][j][k]=0;
}
}
return !printf("%d",dp[(n&1)^1][m][n]);
}
#模型转换,动态规划#洛谷 1758 [NOI2009] 管道取珠的更多相关文章
- 洛谷1758 BZOJ1566 管道取珠题解
题目链接 一道人类智慧的dp题 首先我们可以将∑ai^2转化为求取两次,两次一样的方案数 然后用f[i][j][k][l]表示第一个人在第一个串中取到i第二个串中取到j 第二个人在一个串中取到k第二个 ...
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MBSubmit: 1659 Solved: 971 Description In ...
- 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\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...
- 1566: [NOI2009]管道取珠 - BZOJ
Description Input第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行 ...
- bzoj 1566: [NOI2009]管道取珠
Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. ...
- [NOI2009] 管道取珠
sum a[i]*a[i]可以理解为两个独立但同时进行的游戏得到同一个输出序列的方案数. 设f[l,i,j]为每个游戏都已经推出了l个珠子时,第一个游戏里上边儿的管道已经推出了i个,第二个游戏中上边儿 ...
- 【[NOI2009]管道取珠】
--\(shallwe\):这道题是\(noipDay2T2\)难度 好一个\(Day2T2\)难度啊,我觉得我可以退役了 平方和好像没有什么办法可以快速统计,于是考虑转化一下 我们可以将题意转化成这 ...
- BZOJ1566:[NOI2009]管道取珠——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目 ...
随机推荐
- ADVMP 三代壳(vmp加固)原理分析(加壳流程)
开源项目地址 https://github.com/chago/ADVMP vmp 加固可以说时各大加固厂商的拳头产品了,这个开源项目虽然不是十分完善,让我们可以一览vmp加固的原理,是十分好的学习资 ...
- Taurus.MVC WebMVC 入门开发教程1:框架下载环境配置与运行
前言: 之前有网友说 Mvc系列的教程对新手不友好,因此补充新手入门系列教程. 在开始使用 Taurus.Mvc 进行 Web应用开发之前,建议可以观摩一下之前的文章:WebAPI 系列教程 因为两者 ...
- SBI信息反馈法
https://baijiahao.baidu.com/s?id=1605128367255769158&wfr=spider&for=pc
- 用Taro写一个微信小程序——Taro3路由传参
参考https://docs.taro.zone/docs/router 1.传入参数 Taro.navigateTo({ url: '/pages/page/path/name?id=2&t ...
- 解决xshell连不上ubuntu虚拟机
分析 原因:虚拟机未安装ssh服务(Xshell远程连接需通过ssh协议) 解决方法 ubuntu安装ssh服务器 sudo apt-get install openssh-server 后续有问题可 ...
- Google Chrome 开启多下载下载,提高文件下载速度
在地址栏输入: chrome://flags/#enable-parallel-downloading Parallel downloading改为Enabled后重启浏览器即可打开多线程下载 (多线 ...
- webservice之jersey简单实用
前言 项目中更需要使用到webservice,具体的是使用jersey.那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结w ...
- TypeScript项目开发运行(即时编译、运行,所见所得)
1.项目*.ts自动编译 $ tsc . --watch 2.项目本地web服务运行 $ npm install --save-dev webpack-dev-server npm install - ...
- 【Azure Redis】中国区Redis在东三区的资源无法在通过门户上与北三区资源之间建立灾备链接
问题描述 为应用启用灾备管理,在北三区建立了一个Azure Redis,同时,在东三区也建立了一个同样的Prem级Redis服务.但是在建立灾备(DR:Disease Recovery)时候,却无法选 ...
- 使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph
本文由社区用户 Albert 贡献,首发于 NebulaGraph 论坛,旨在提供多一种的部署方式使用 NebulaGraph. 在本文,我将会详细地记录下我用 K8s 部署分布式图数据库 Nebul ...