又是艰难想题的一晚,又是做不出来的一题 (;д;) 好想哭啊……

  这题最关键的一点还是提供一种全新的想法。看到平方和这种东西,真的不好dp。然而我一直陷在化式子的泥潭中出不来。平方能够联想到什么?原本的方案的乘积。将两部分相乘,我们能够联想到这是两个人在取珠,求他们取出来的珠子颜色序列相同的方案数之和。(第一个人要得到 \(x\) 这种颜色方案有\(a_{x}\)种,第二个人也一样。所以一共为 \({a_{x}}^{2}\) 种。到这里,应该就很容易了。虽然看了题解之后恍然大悟,然而深深地明白目前的自己与做出此题之间仍然是有着无法逾越的鸿沟的。唯有坚持努力下去,勤加积累才能够等到柳暗花明的一天 (≧∇≦)ノ

  注意滚动数组哦。

#include <bits/stdc++.h>
using namespace std;
#define maxn 505
#define mod 1024523
int n, m, a[maxn], b[maxn];
int pre = , now = , f[][maxn][maxn];
char c; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void up(int &x, int y) { x = (x + y) % mod; } int main()
{
int n = read(), m = read();
for(int i = ; i <= n; i ++)
{
cin >> c;
if(c == 'B') a[n - i + ] = ;
}
for(int i = ; i <= m; i ++)
{
cin >> c;
if(c == 'B') b[m - i + ] = ;
}
f[][][] = ;
for(int i = ; i <= n + m; i ++)
{
int lim1 = min(i, n), lim2 = min(i, n);
for(int j = ; j <= lim1; j ++)
for(int k = ; k <= lim2; k ++)
{
f[now][j][k] = ;
int x = i - j, y = i - k;
if(x > m || y > m) continue;
if(a[j] == a[k]) up(f[now][j][k], f[pre][j - ][k - ]);
if(a[j] == b[i - k]) up(f[now][j][k], f[pre][j - ][k]);
if(b[i - j] == a[k]) up(f[now][j][k], f[pre][j][k - ]);
if(b[i - j] == b[i - k]) up(f[now][j][k], f[pre][j][k]);
}
swap(pre, now);
}
printf("%d\n", f[pre][n][n]);
return ;
}

【题解】NOI2009管道取珠的更多相关文章

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

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

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

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

  3. NOI2009 管道取珠 神仙DP

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

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

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

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

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

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

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

  7. 1566: [NOI2009]管道取珠 - BZOJ

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

  8. bzoj 1566: [NOI2009]管道取珠

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

  9. 【[NOI2009]管道取珠】

    --\(shallwe\):这道题是\(noipDay2T2\)难度 好一个\(Day2T2\)难度啊,我觉得我可以退役了 平方和好像没有什么办法可以快速统计,于是考虑转化一下 我们可以将题意转化成这 ...

随机推荐

  1. Hadoop(15)-MapReduce框架原理-FileInputFormat的实现类

    1. TextInputFormat 2.KeyValueTextInputFormat 3. NLineInputFormat

  2. python应用:爬虫实例(动态网页)

    以爬取搜狗图片为例,网页特点:采用“瀑布流”的方式加载图片,图片的真实地址存放在XHR中 #-*-coding:utf8-*- import requests import urllib import ...

  3. scrapy框架爬取笔趣阁

    笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...

  4. node Cookie

    代码: const express = require('express'); const cookieParser = require('cookie-parser'); const app = e ...

  5. 【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

    Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的 ...

  6. 加载旋转框(loading spinner)

    目标是这样的 用到的组件 AlertDialog 和 ProgressBar 先创建一个 AlertDialog 的布局 <?xml version="1.0" encodi ...

  7. Delphi中ModalResult的使用

    Delphi中ModalResult的功能非常实用. 在自己设计的Dialog界面中,选择相应的按钮,设置按钮的 ModalResult属性为mrOK .mrCancel 等.这样的设置,当按下该按钮 ...

  8. 洛谷P2307 迷宫

    怎么又是一道叫迷宫的题呀QWQ 题目链接 这道题主要是对并查集的考察,需要注意的坑点在于有可能存在的不止一个联通块. 我们只需要对输入的两个数据进行判断,如果在一个集合中证明有多条路则输出0,如果不在 ...

  9. 两个完整的jquery slide多方面滑动效果实例

    实例1,需要引用jquery-ui.js <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

  10. ubuntu开启crontab日志

    今天发现Ubuntu的/var/log下没有cron日志,用下面的命令即可开启: -default.conf cron.*              /var/log/cron.log #将cron前 ...