P1758 [NOI2009] 管道取珠 题解
题意:
有点复杂,看 原题面 吧。
思路
发现可以等价为两个人独立操作操作出来的序列相同的方案数。
然后发现复杂度阈值可以接受 \(n^3\),因此直接套路地设 \(f_{t,i,j}\) 表示两个人操作了 \(t\) 次后第一个人操作了第一个管道 \(i\) 次,第二个人操作了第一个管道 \(j\) 次的方案数。
这么设计状态的原因是只有两个人操作次数相同才有可能操作出来序列相同,而第二个管道的操作次数在总次数确定的情况下被唯一确定。
然后就是正常的分类讨论,看当前第一个人的管道与第二个人的管道的球有没有对位相等,如果相等就从那里转移过来,然后就做完了。
code
需要注意的是 \(i\) 与 \(j\) 可以取到0。
同时空间开不下 \(n^3\) 的数组,需要写滚动数组。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=505,p=1024523;
int n,m,f[3][N][N];
char a[N],b[N];
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=m;i++) cin>>b[i];
f[0][0][0]=1;
for(int t=1;t<=n+m;t++){
int lst=(t-1)%2,now=lst^1;
for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) f[now][i][j]=0;
for(int i=max(0ll,t-m);i<=min(n,t);i++){
for(int j=max(0ll,t-m);j<=min(n,t);j++){
if(i>0&&j>0&&a[i]==a[j]) f[now][i][j]=(f[now][i][j]+f[lst][i-1][j-1])%p;
if(i>0&&a[i]==b[t-j]) f[now][i][j]=(f[now][i][j]+f[lst][i-1][j])%p;
if(j>0&&b[t-i]==a[j]) f[now][i][j]=(f[now][i][j]+f[lst][i][j-1])%p;
if(b[t-i]==b[t-j]) f[now][i][j]=(f[now][i][j]+f[lst][i][j])%p;
}
}
}
cout<<f[((n+m)%2)][n][n];return 0;
}
P1758 [NOI2009] 管道取珠 题解的更多相关文章
- BZOJ1566:[NOI2009]管道取珠——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目 ...
- luogu P1758 [NOI2009]管道取珠
luogu 这个题中的平方有点东西,考虑他的组合意义,也就是做这个过程两次,如果两次得到的结果一样就给答案+1,所以可以考虑dp,设\(f_{i,j,k,l}\)表示第一个过程中上面取到的第\(i\) ...
- P1758 [NOI2009]管道取珠
考虑这个式子的意义. 不妨看做进行了两轮操作,这个式子显然等价于两次操作后得到的序列相同的方案数. 这个东西显然是可以dp的. 随便优化一下就成了O(n^3)
- 【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 ...
- 【题解】NOI2009管道取珠
又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...
- NOI2009 管道取珠 神仙DP
原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...
- BZOJ.1566.[NOI2009]管道取珠(DP 思路)
BZOJ 洛谷 考虑\(a_i^2\)有什么意义:两个人分别操作原序列,使得得到的输出序列都为\(i\)的方案数.\(\sum a_i^2\)就是两人得到的输出序列相同的方案数. \(f[i][j][ ...
- BZOJ1566 [NOI2009]管道取珠 【dp】
题目 输入格式 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串, ...
- 1566: [NOI2009]管道取珠 - BZOJ
Description Input第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行 ...
随机推荐
- 打工人最强福音上线!AOne终端全面接入DeepSeek大模型!
DeepSeek深度融合国产AI生态,国云连放大招! 继天翼云多款产品上线DeepSeek后, 见证企业级智能办公的时刻来了! 天翼云AOne联合国产大模型王者DeepSeek 带着671B满血版.7 ...
- What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
前言 DeepSeek推出更强大的推理模型DeepSeek R1后一发不可收拾,迅速火遍全球,用户暴增,但巨大的流量以及一些不可控因素,DeepSeek官网变得极不稳定,经常出现"网络繁忙& ...
- 在table中tr的display:block显示布局错乱问题
参考链接:https://blog.csdn.net/zj853975468/article/details/51554054?utm_medium=distribute.pc_relevant_do ...
- **Selenium IDE、Selenium RC 和 WebDriver 之间有什么区别?**
- OpnenHarmony 开源鸿蒙北向开发——2.第一个工程HelloWorld
一.新建项目 我们打开IDE后,选择新建项目 选择这一个 设置参数 设置完成后选择Finish 项目创建后会自动下载一些东西,不用担心 二.运行 我们先什么都不用管,直接运行 先设置设备,我们这里 ...
- 在Proxmox VE pve中安装windows操作系统——以ltsc2019为例
pve创建ltsc2019还是比较简单的.只是没有virtio驱动的话,选择磁盘的时候找不到磁盘.这里主要是列出如何加载virtio驱动 1.创建虚拟机忽略.注意需要新建2个CDROM.一个为wind ...
- CENTOS 7 使用Docker安装oracle 11g
1.docker第一次安装失败,下一次会提示同名的容器已经存在,解决办法: docker container ls -a 根据上面执行的接口,选择一个containerid,然后带入到下面的命令 do ...
- Delphi 时间控制窗口标题栏文字或任务栏标题文字滚动
1.定义一个全局变量保存显示到标题栏的字符串,strScroll: Widestring = '风行天下 - By WindSon '; 2.添加一个Timer控件,设置属性Interval := 3 ...
- 【SpringCloud】zuul路由网关
zuul路由网关 概述描述 路由基本配置 路由访问映射规则 查看路由信息 过滤器 太老旧了,就不做了解了
- MySQL 创建数据库并指定字符集编码
备忘 CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON mydb.* TO "use ...