题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1566

一眼看上去很懵...

但是答案可以转化成有两个人在同时取珠子,他们取出来一样的方案数;

f[i][j][k]表示一共取了 i 个珠子,第一个人取了 j 个珠子,第二个人取了 k 个珠子时一样的方案数;

于是就很好转移了;

这个转化的想法真妙啊...

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=,mod=;
int n,m,f[][maxn][maxn],ans;
char s1[maxn],s2[maxn];
int main()
{
scanf("%d%d",&n,&m);
cin>>s1+;cin>>s2+;
for(int i=;i<=n/;i++)swap(s1[i],s1[n-i+]);
for(int j=;j<=m/;j++)swap(s2[j],s2[m-j+]);
f[][][]=;
for(int i=;i<=n+m;i++)
for(int j=max(,i-m);j<=min(i,n);j++)
for(int k=max(,i-m);k<=min(i,n);k++)
{
int x=i%,y=(i+)%,a=i-j,b=i-k;
f[x][j][k]=;//
if(j&&k&&s1[j]==s1[k])(f[x][j][k]+=f[y][j-][k-])%=mod;
if(a&&k&&s2[a]==s1[k])(f[x][j][k]+=f[y][j][k-])%=mod;
if(j&&b&&s1[j]==s2[b])(f[x][j][k]+=f[y][j-][k])%=mod;
if(a&&b&&s2[a]==s2[b])(f[x][j][k]+=f[y][j][k])%=mod;
}
printf("%d",f[(n+m)%][n][n]);
return ;
}

bzoj1566 [NOI2009]管道取珠——DP的更多相关文章

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

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1566 思路 n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平 ...

  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. mysql5.7.20主从和主主搭建

    环境描述mysql主从和主主同步 注意事项:1)同步服务器网络联通,ping通,对方授权信息连接到对方数据库(防火墙开发3306)2)关闭SELinux3)同步前,双方数据库需要同步数据保持一致. 主 ...

  2. django学习之- Models笔记

    1:创建数据库表 #单表# app01_user 生成的表明为 tb1class User(models.Model): name = models.CharField(max_length=32,d ...

  3. ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路

    https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析  分层最短路  我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...

  4. 2016 ACM-ICPC CHINA-Final

    补题进度:10/12 地址:http://codeforces.com/gym/101194 A(签到) 略 B(数位DP) 题意: 定义一个01字符串为good串当且仅当将其奇数位或者偶数位单独拎出 ...

  5. DELPHI最新的产品路线图

    1)根据众多像您一样的客户要求,我们改为一年一个重大版本及更多更新.这个计划回到一年发布周期并提供额外的2或3个包含附加功能及支持期间发布的新版操作系统的更新. 2)在 RAD Studio  10. ...

  6. C# DataGridView,右键单击RowHeader时显示右键菜单怎么做?

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)         {       ...

  7. 【转载】同步和互斥的POSIX支持(互斥锁,条件变量,自旋锁)

    上篇文章也蛮好,线程同步之条件变量与互斥锁的结合: http://www.cnblogs.com/charlesblc/p/6143397.html   现在有这篇文章: http://blog.cs ...

  8. 关闭Windows 2003/2008中IE增强的安全配置的方法

           在使用Windows Server 2003/2008操作系统时,打开IE浏览网页时,发现浏览器总提示 "是否需要将当前访问的网站添加到自己信任的站点中去",要是不信 ...

  9. [LeetCode][Java] Subsets

    题目: Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset ...

  10. rand和srand的用法(转载)

    首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数)表头文件: #include<stdlib.h> ...