题目链接

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的更多相关文章

  1. bzoj1566 [NOI2009]管道取珠——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1566 一眼看上去很懵... 但是答案可以转化成有两个人在同时取珠子,他们取出来一样的方案数: ...

  2. Bzoj 1566: [NOI2009]管道取珠(DP)

    1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1558 Solved: 890 [Submit][Status ...

  3. BZOJ.1566.[NOI2009]管道取珠(DP 思路)

    BZOJ 洛谷 考虑\(a_i^2\)有什么意义:两个人分别操作原序列,使得得到的输出序列都为\(i\)的方案数.\(\sum a_i^2\)就是两人得到的输出序列相同的方案数. \(f[i][j][ ...

  4. BZOJ1566 [NOI2009]管道取珠 【dp】

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

  5. [NOI2009]管道取珠 DP + 递推

    ---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某 ...

  6. [bzoj1566][NOI2009]管道取珠

    来自FallDream的博客,未经允许,请勿转载,谢谢. n<=500 神题...... 发现这个平方可以看作两个序列相同的对数  然后就可以表示状态了. f[i][j][k]表示两个序列各选了 ...

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

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

  8. NOI2009 管道取珠 神仙DP

    原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...

  9. BZOJ 1566 管道取珠(DP)

    求方案数的平方之和.这个看起来很难解决.如果转化为求方案数的有序对的个数.那么就相当于求A和B同时取,最后序列一样的种数. 令dp[i][j][k]表示A在上管道取了i个,下管道取了j个,B在上管道取 ...

随机推荐

  1. (转)MySql 获取所有级联父级或所有级联子级

    from:https://yq.aliyun.com/articles/48885 最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中我们知道有一个 ...

  2. 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义

    from:http://blog.csdn.net/feiyun0112/article/details/39697955 创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问 ...

  3. hbase shell operate

    , start hdfs [hadoop@alamps sbin]$ ./start-all.sh This script is Deprecated. Instead use start-dfs.s ...

  4. [Unit Test] Unit Test Brief Introduction

    Levels of Testing- Acceptance- Performance- Functional- Integration- Unit Why Unit Testing- Feedback ...

  5. [16]Windows内核情景分析 --- 服务管理

    随时可以看到任务管理器中有一个services.exe进程,这个就是系统的服务控制管理进程,简称SCM 这个进程专门用来管理服务(启动.停止.删除.配置等操作) 系统中所有注册的服务都登记在\HKEY ...

  6. 20165215 2017-2018-2 《Java程序设计》第5周学习总结

    20165215 2017-2018-2 <Java程序设计>第5周学习总结 教材学习内容总结 chapter7 Java支持在一个类中声明另外一个类,这样的类称作内部类,而包含内部类的类 ...

  7. case when then的用法

    用法一:等值判断,相当于switch CASE expression WHEN value1 THEN returnValue1 WHEN value2 THEN returnValue2 WHEN ...

  8. AlphaGo设计师黄士杰:“最强的学习技能在人类的脑袋里”

    AlphaGo设计师黄士杰:“最强的学习技能在人类的脑袋里” 深度学习和强化学习结合看来才能解决彩票预测的问题 可以这么说,AlphaGo的成功就是深度学习与强化学习的胜利,因为两者结合在一起,建构判 ...

  9. GoldenGate Logdump基本使用

    Logdump是GoldenGate复制软件中附带的一个工具软件,在OGG的目录下可以找到.这个工具主要用于分析OGG生成的队列文件,查找记录.统计队列文件中的数据等. 在OGG安装目录下执行logd ...

  10. ubuntu_virtualenv

    sudo pip install virtualenv 1.安装virtualenv(需要先安装pip): $ [sudo] pip install virtualenv 2.创建虚拟环境: $ vi ...