bzoj1566: [NOI2009]管道取珠 DP
题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=1566
思路
n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平方
k^2=(1+1+1+..+1)*(1+1++1+..+1)
for (i=1; i<=n; i++) for (j=1; j<=n; j++) if (a[i]==a[j]) ans++;
感觉看起来还是有一丝丝领悟的
转化为两个人分别同时做游戏
取出相同的方案
\(f[i][a][b]\)表示第i轮一个人上面去了a个,第二个上面取了b个
下面的可以算出来
就可以dp了
难在转化上,转移还蛮简单的
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1007,mod=1024523;
int read() {
	int x=0,f=1;char s=getchar();
	for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
	for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
	return x*f;
}
int n,m,f[2][N][N];
char a[N],b[N];
inline int add(int a) {return a>=mod?a-mod:a;}
int main() {
	// freopen("1.in","r",stdin);
	n=read(),m=read();
	scanf("%s%s",a+1,b+1);
	f[0][0][0]=1;
	int cnt=1;
	for(int k=1;k<=n+m;++k,cnt^=1) { // 第i轮
		for(int i=0;i<=min(n,k);++i) { // 第一人 的 上面已经使用过的珠子的个数
			int j=k-i;// 第一人 的 下面已经使用过的珠子的个数
			for(int x=0;x<=min(n,k);++x) { //第二人 的 上面已经使用过的珠子的个数
				int y=k-x;//第二人 的 下面已经使用过的珠子的个数
				f[cnt][i][x]=0;
				if(a[i]==a[x]&&i-1>=0&&x-1>=0)
					f[cnt][i][x]=add(f[cnt][i][x]+f[cnt^1][i-1][x-1]);
				if(b[j]==b[y])
					f[cnt][i][x]=add(f[cnt][i][x]+f[cnt^1][i][x]);
				if(a[i]==b[y]&&i-1>=0)
					f[cnt][i][x]=add(f[cnt][i][x]+f[cnt^1][i-1][x]);
				if(b[j]==a[x]&&x-1>=0)
					f[cnt][i][x]=add(f[cnt][i][x]+f[cnt^1][i][x-1]);
			}
		}
	}
	// for(int i=1;i<=n+m;++i) {
	// 	cout<<i<<"\n";
	// 	for(int j=1;j<=i;++j) {
	// 		for(int k=1;k<=i;++k) {
	// 			cout<<f[i][j][k]<<" ";
	// 		}
	// 		cout<<"\n";
	// 	}
	// 	puts("");
	// }
	printf("%d\n",f[cnt^1][n][n]);
	return 0;
}
bzoj1566: [NOI2009]管道取珠 DP的更多相关文章
- 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][ ... 
- BZOJ1566 [NOI2009]管道取珠  【dp】
		题目 输入格式 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串, ... 
- [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在上管道取 ... 
随机推荐
- C# Dapper 简单实例
			/// <summary> /// 分页信息 /// </summary> public class PageInfo<T> { /// & ... 
- web前端名词
			HTML: HyperText Markup Language 超文本标记语言 XHTML:Extensible HyperText Markup Language 可扩展性超文本标记语 ... 
- yii2 modules模块配置指南
			在Yii2 中模块是可以无限级嵌套的,也就是说,模块可以包含另一个包含模块的模块,我们称前者为父模块,后者为子模块, 子模块必须在父模块的yiibaseModule::modules属性中申明,例如: ... 
- 【Hadoop学习之十】MapReduce案例分析二-好友推荐
			环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 最应该推荐的好友TopN,如何排名 ... 
- react  页面存在多  input 时
			this.setState({ [e.target.name]:e.target.value }) let o = {} o[e.target.name] = e.target.value this. ... 
- Linux基础命令---chfn
			chfn chfn指令可以改变通过finger指令查看到的信息.此信息存储在/etc/passwd文件中,并由Finger程序显示.LinuxFinger命令将显示可由chfn更改的四条信息:您的真名 ... 
- Android百大框架排行榜
			Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ... 
- linux yum配置本地iso镜像
			1.本地源配置:cdiso.repo 将iso镜像文件中所有内容复制到/public/software/cdrom 中,节点将本地yum指向此处. [root@node19 ~]# vim /etc/ ... 
- GUI常用对象介绍2
			%示意line对象的用法 hf=figure; hl=plot([:]); %示意line对象的属性 get(hl) %设置line的颜色 set(hl,'Color','r'); %设置每个点形状 ... 
- Codeforce  507B - Amr and Pins
			Amr loves Geometry. One day he came up with a very interesting problem. Amr has a circle of radius r ... 
