【题解】NOI2009管道取珠
又是艰难想题的一晚,又是做不出来的一题 (;д;) 好想哭啊……
这题最关键的一点还是提供一种全新的想法。看到平方和这种东西,真的不好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管道取珠的更多相关文章
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MBSubmit: 1659 Solved: 971 Description In ...
- Bzoj 1566: [NOI2009]管道取珠(DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1558 Solved: 890 [Submit][Status ...
- NOI2009 管道取珠 神仙DP
原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个 ...
- BZOJ.1566.[NOI2009]管道取珠(DP 思路)
BZOJ 洛谷 考虑\(a_i^2\)有什么意义:两个人分别操作原序列,使得得到的输出序列都为\(i\)的方案数.\(\sum a_i^2\)就是两人得到的输出序列相同的方案数. \(f[i][j][ ...
- BZOJ1566:[NOI2009]管道取珠——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目 ...
- BZOJ1566 [NOI2009]管道取珠 【dp】
题目 输入格式 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串, ...
- 1566: [NOI2009]管道取珠 - BZOJ
Description Input第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行 ...
- bzoj 1566: [NOI2009]管道取珠
Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. ...
- 【[NOI2009]管道取珠】
--\(shallwe\):这道题是\(noipDay2T2\)难度 好一个\(Day2T2\)难度啊,我觉得我可以退役了 平方和好像没有什么办法可以快速统计,于是考虑转化一下 我们可以将题意转化成这 ...
随机推荐
- winform窗体传值和动态添加控件
1.跳转窗体时传值 //将要显示的页面实例化 RoleMenuForm rmf = new RoleMenuForm(); try { //在此给RoleMenuForm 窗体中的变量roleId传值 ...
- Centos6.5 安装python2.7.14
2018-06-30 因为Centos6.5系统默认使用,python2.6.6.最近在学python.老师推荐将2.6.6升级至2.7.14.所以以留此文,怕哪天脑子短路好回来看看... >1 ...
- linux总结及常用命令
一.操作系统的作用: 1.是现代计算机系统中最基本和最重要的系统软件 2.承上启下的作用 3.向下对硬件操作进行封装 4.向上对用户和应用程序提供方便访问硬件的接口 二.不同领域的操作系统: 1 ...
- MySQL数据库操作(DDL)
一.创建数据库 语法:create database 数据库名称 [库选项]; 库选项:(可选)数据库的属性,一般有字符集与校对集,保存在数据库所属文件夹下的opt文件 charset:字符集,表示该 ...
- JNI模板
java为了调用底层驱动函数,需要调用外部的C/C++代码,java提供了JNI接口: 然后将C代码编译成库(windows下 .dll / android环境下 .so) arm-linux-gcc ...
- SEARCH(文字の検索)
文字列に関する無効命令 以下の各命令は無効であり.4.6 および 6.10 までのリリースとの互換性を確保するためにのみ利用可能となっています.これらの命令が古いプログラムの中に出現することはあります ...
- CONVERT TEXT(转换为可排序格式)
可以将字符 字段转换为 可按字母顺 序排列的格 式: 语法 CONVERT TEXT <c> INTO SORTABLE CODE <sc>. 该语句为字 符字段 填充可排序 ...
- Ganglia3.1.7安装与配置(收录)
一.所需要软件 二.安装过程 1.Ganglia运行平台的安装 2.Ganglia依赖库的安装 3.RRDTool的安装 4.Ganglia的安装 (包括使用yum方式 ...
- java容器操作一
List l = new ArrayList(); l.add(1); l.add("ne"); // 获取 System.out.println(l.get(0)); // 判断 ...
- Spotlight on MySQL
聚光灯在MySQL 1.Sessios会话Total Users:总用户数前连接到MySQL服务器的用户会话总数Active Users:活跃用户此控件表示连接到当前正在执行SQL语句或其他数据库请求 ...