【BZOJ1566】【NOI2009】管道取珠(动态规划)

题面

BZOJ

题解

蛤?只有两档部分分。一脸不爽.jpg

第一档?爆搜,这么显然,爆搜+状压最后统计一下就好了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
#define MOD 1024523
#define MAX 555
int a[1<<24];
int n,m,ans;
char S1[MAX],S2[MAX];
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
void dfs(int n,int m,int S)
{
if(!n&&!m){a[S]++;return;}
if(n)dfs(n-1,m,(S<<1)|(S1[n]-'A'));
if(m)dfs(n,m-1,(S<<1)|(S2[m]-'A'));
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",S1+1);scanf("%s",S2+1);
dfs(n,m,0);
for(int i=0;i<1<<24;++i)add(ans,1ll*a[i]*a[i]%MOD);
printf("%d\n",ans);
return 0;
}

这种神仙题思维太优秀了。

考虑一下贡献是什么\(\sum a^2\)

可以理解为两个游戏同时进行,并且状态相同的方案总数

这样就可以\(dp\)了

设\(f[i][j][k][l]\)表示第一个游戏上下面还剩\(i,j\)个珠子,第二个还剩\(k,l\)的方案数

每次转移的时候强制选一样的分别减一就行了

发现\(i+j=k+l\),所以状态只要\(3\)维

洛谷卡空间,再把第一维滚掉就好了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MOD 1024523
#define MAX 505
int n,m,ans;
char S1[MAX],S2[MAX];
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
int f[2][MAX][MAX];
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",S1+1);scanf("%s",S2+1);
f[n&1][m][n]=1;
for(int i=n,nw=n&1,pw=nw^1;~i;--i,nw^=1,pw^=1)
{
memset(f[pw],0,sizeof(f[pw]));
for(int j=m;~j;--j)
for(int k=n,l;~k;--k)
{
l=i+j-k;if(l<0||l>m)continue;
if(i&&k&&S1[i]==S1[k])add(f[pw][j][k-1],f[nw][j][k]);
if(i&&l&&S1[i]==S2[l])add(f[pw][j][k],f[nw][j][k]);
if(j&&k&&S2[j]==S1[k])add(f[nw][j-1][k-1],f[nw][j][k]);
if(j&&l&&S2[j]==S2[l])add(f[nw][j-1][k],f[nw][j][k]);
}
}
printf("%d\n",f[0][0][0]);
return 0;
}

【BZOJ1566】【NOI2009】管道取珠(动态规划)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. NOI2009 管道取珠 神仙DP

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

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

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

  9. 【题解】NOI2009管道取珠

    又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...

  10. BZOJ1566:[NOI2009]管道取珠——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目 ...

随机推荐

  1. codevs2215 三角形蛋糕

    codevs2215 三角形蛋糕 原题链接 煞笔题??? 开始一看似乎没啥思路的样子 然后想了一下 额... 首先啃腚考虑缩进存储 然后看一下这样的性质 #-##----# -----#- ---#- ...

  2. 跨越适配&性能那道坎,企鹅电竞Android weex优化

    WeTest 导读 企鹅电竞从17年6月接入weex,到现在已经有一年半的时间,这段时间里面,针对遇到的问题,企鹅电竞终端主要做了下面的优化: image组件 预加载 预渲染 Image组件 weex ...

  3. 类的扩展之 DataReader的扩展

    看了关于DataReader的扩展,发现能节省很多代码.从数据库读取数据最原始方法就是while()然后做循环,如果数据库添加一个字段那么你所有读取数据库的方法全部添加.通过扩展这个类就摆脱了这种令人 ...

  4. Vue.js项目中,当图片无法显示时则显示默认图片

    使用require将图片进入,写法如下: data: () => ({logo: 'this.src="' + require('../assets/img.png') + '&quo ...

  5. 在香港网站使用工商银行的MasterCard,工商银行所犯的低级的错误,金融安全何在

  6. 亚马逊首次推出卖家APP 可掌握商品盈利状况

    美国零售巨头亚马逊近日首次对外发布了第一款针对卖家和商户的客户端,帮助他们更加高效的管理商品和销售数据. 据美国科技新闻网站 Mashable 报道,之前亚马逊在商户移动客户端方面一直空缺,许多商户不 ...

  7. redis memcache 比较

    Redis与Memcached的区别 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都 ...

  8. Beta周王者荣耀交流协会第三次Scrum会议

    1.立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王玉玲 2.时间跨度: 2017年11月12日 18:00 — 18:20 ,总计20分钟. 3.地点: 一食 ...

  9. Android工程方法数超过64k,The number of method references in a .dex file cannot exceed 64K.

    最近将一个老的Eclipse项目转到Android Studio后,用gradle添加了几个依赖,项目可以make,但是一旦run就报错 Error:The number of method refe ...

  10. C++ Primer Plus学习:第十三章

    第十三章 类继承 继承的基本概念 类继承是指从已有的类派生出新的类.例: 表 0-1 player.h class player { private: string firstname; string ...