原题链接

原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求。我们考虑转化一下问题。

首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个括号中的\(1\)都有\(a_i\)个。为什么要这样呢?仔细理解一下拆开后的式子,是不是就是相当于分别操作两次,问最终序列相同的方案数?

这样的话\(DP\)就比较好想了,设\(f[i][j][k][l]\)表示第一次操作上管道已经取了\(i\)个,下管道取了\(j\)个,第二次操作上管道取了\(k\)个,下管道取了\(l\)个时相同的方案数。

显然,这样会炸空间。又发现\(i+j=k+l\),所以最后一维可以扔了。

转移方程就不详细叙说了,写在代码里吧。最后还要来一个滚动数组优化空间!

#include <bits/stdc++.h>

using namespace std;

#define N 500
#define MOD 1024523 int n, m, f[2][N+5][N+5];
char s1[N+5], s2[N+5]; int main() {
#ifndef ONLINE_JUDGE
freopen("testdata.in", "r", stdin);
freopen("testdata.out", "w", stdout);
#endif
scanf("%d%d", &n, &m);
scanf("%s%s", s1+1, s2+1);
for(int i = 1, j = n; i < j; ++i, --j) swap(s1[i], s1[j]);
for(int i = 1, j = m; i < j; ++i, --j) swap(s2[i], s2[j]);
f[0][0][0] = 1;
int flag = 0;
for(int i = 0; i <= n; ++i, flag ^= 1) {
memset(f[flag^1], 0, sizeof f[flag^1]);
for(int j = 0; j <= m; ++j)
for(int k = 0, l; k <= min(n, i+j); ++k) {
l = i+j-k;
if(l < 0 || l > m) continue;
//分4种情况分别转移
if(s1[i+1] == s1[k+1]) f[flag^1][j][k+1] = (f[flag^1][j][k+1]+f[flag][j][k])%MOD;
if(s2[j+1] == s1[k+1]) f[flag][j+1][k+1] = (f[flag][j+1][k+1]+f[flag][j][k])%MOD;
if(s1[i+1] == s2[l+1]) f[flag^1][j][k] = (f[flag^1][j][k]+f[flag][j][k])%MOD;
if(s2[j+1] == s2[l+1]) f[flag][j+1][k] = (f[flag][j+1][k]+f[flag][j][k])%MOD;
}
} printf("%d\n", f[flag^1][m][n]);
return 0;
}

NOI2009 管道取珠 神仙DP的更多相关文章

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

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

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

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

  3. NOI2009管道取珠(dp)

    题意:给定两列球,可以从任意一列球的末尾弹出一个球,最后会得到一个序列,设第i种序列可以被a[i]种操作产生,那么会产生a[i]^2的贡献,求贡献和. Solution: 首先我们观察a[i]^2的含 ...

  4. [NOI2009]管道取珠(DP)

    Luogu1758 DarkBZOJ1566 题解 因为他要让我们求出每种状态出现次数的平方和,这样模拟两人取球的时候,设第一个人取球的方案为A,第二个人取球的方案为B, 这样对于每一个A,都有C(n ...

  5. bzoj 1566: [NOI2009]管道取珠【dp】

    想不出来想不出来 仔细考虑平方的含义,我们可以把它想成两个人同时操作,最后得到相同序列的情况 然后就比较简单了,设f[t][i][j]为放了t个珠子,A的上方管道到了第i颗珠子,B的上方管道到了第j颗 ...

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

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

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

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

  8. 【题解】NOI2009管道取珠

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

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

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

随机推荐

  1. 解决Geoserver请求跨域的几种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景描述 跨域问题是浏览器同源安全制引起的特别常见的问题.不同前端语 ...

  2. Android,View转换bitmap,bitmap转换drawable

    Android View转换Bitmap,Bitmap转换Drawable //测试设置bitmap View view1 = ViewGroup.inflate(context, R.layout. ...

  3. Android为TV端助力:intent传递消息

    我们都知道一个activity向另外一个activity传递消息可以用intent来传递 现在需求如下,一个不断接收消息服务的service,一个收到消息进行处理的activity service第一 ...

  4. 三星5.0以上设备最完美激活XPOSED框架的经验

    对于喜欢钻研手机的小伙伴来说,常常会接触到Xposed框架以及种类繁多功能强大的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活Xposed框架是异常简易的,但随着系统版本的不断 ...

  5. 从零学习Fluter(六):Flutter仿boss直聘v1.0重构

    今天继续学习flutter,觉得这个优秀的东西,许多方面还需要完善,作为一个后来者,要多向别人学习.俗话说,“学无先后,达者为师”.今天呢,我又重新把flutter_boss这个项目代码 从头到脚看了 ...

  6. Vue components Cannot read property '__ob__' of undefined

    在Vue开发过程中,子组件向父组件传值的过程中,函数时可以对应的触发的,但是当父组件要改变自己的属性的时候报错了. 具体的页面逻辑是这样的,父组件 子组件 点击了之后没有问题,子组件向父组件传值  t ...

  7. C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic

    例子 返回一个LIst<oject>类型 而oject含有 30个字段 而我只需要两个字段.这里实用dynamic 和 linq. 上代码: 注意select new {} 为匿名类型,这 ...

  8. Redis 由浅入深

    1.redis是什么? redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中) 使用java对redis进行操作类似jdbc接口标准对mysql,有各类实现 ...

  9. Win7下emacs简单配置

    ;;win7下.emacs在C:\Users\用户名\AppData\Roaming目录下 在.emacs文件中添加 ;; cancel welcome page取消欢迎界面(setq inhibit ...

  10. windowsServer部署站点

    ### windowsServer部署站点 前言:最近在和朋友一起买了个服务器,奈何他选的是windowsServer,无所谓了,就把自己的站点从之前的虚拟主机迁过来,记录下. 准备工作: 服务器上搭 ...