解题:NOI 2009 管道取珠
考虑这个平方的实际意义,实际是说取两次取出一样的序列
那么设$dp[i][j][k][h]$表示第一次在上面取$i$个下面取$j$个,第二次在上面取$k$个下面取$h$个的方案数
等等$n^4$根本开不下+过不去啊=。=
发现$i,j,k$固定时$h$可以算出来,于是少一个$n$的复杂度
建议填表转移,每次从$dp[i][j][k]$转移过去,所以如果空间不够就把$i$滚掉
提示:被卡常的尝试统计的时候判一下是否有值就能过了。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,mod=;
int n,m,noww,last,dp[][N][N];
char a[N],b[N];
void Mod(int &x)
{
if(x>=mod) x-=mod;
}
int main()
{
register int i,j,k;
scanf("%d%d%s%s",&n,&m,a+,b+);
dp[][][]=noww=;
for(i=;i<=n;i++)
{
memset(dp[noww],,sizeof dp[noww]);
for(j=;j<=m;j++)
for(k=;k<=n;k++)
{
int h=i+j-k,las=dp[last][j][k];
if(h>=&&h<=m&&las)
{
if(a[i+]==a[k+]) Mod(dp[noww][j][k+]+=las);
if(a[i+]==b[h+]) Mod(dp[noww][j][k]+=las);
if(b[j+]==b[h+]) Mod(dp[last][j+][k]+=las);
if(b[j+]==a[k+]) Mod(dp[last][j+][k+]+=las);
}
}
last=noww,noww^=;
}
printf("%d",dp[noww][m][n]);
return ;
}
解题:NOI 2009 管道取珠的更多相关文章
- 动态规划:NOI 2009 管道取珠
[NOI2009] 管道取珠 输入文件:ballb.in 输出文件:ballb.out 简单对比 时间限制:1 s 内存限制:512 MB #include <iostream> ...
- BZOJ 1566 【NOI2009】 管道取珠
题目链接:管道取珠 这道题思路还是很巧妙的. 一开始我看着那个平方不知所措……看了题解后发现,这种问题有一类巧妙的转化.我们可以看成两个人来玩这个游戏,那么答案就是第二个人的每个方案在第一个人的所有方 ...
- 【BZOJ1566】【NOI2009】管道取珠(动态规划)
[BZOJ1566][NOI2009]管道取珠(动态规划) 题面 BZOJ 题解 蛤?只有两档部分分.一脸不爽.jpg 第一档?爆搜,这么显然,爆搜+状压最后统计一下就好了 #include<i ...
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MBSubmit: 1659 Solved: 971 Description In ...
- BZOJ1566 【NOI2009】管道取珠
题面 这是一道DP神题,直到我写下这句题解时也没有想明白…… 首先,这道题要我们求所有(不同输出序列的方案数)的平方和,于是我们当然就想到求所有不同输出序列的方案数……(大雾) .这道题一个巧妙的地方 ...
- 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][ ...
- BZOJ 1566 管道取珠(DP)
求方案数的平方之和.这个看起来很难解决.如果转化为求方案数的有序对的个数.那么就相当于求A和B同时取,最后序列一样的种数. 令dp[i][j][k]表示A在上管道取了i个,下管道取了j个,B在上管道取 ...
随机推荐
- yocto-sumo源码解析(一): oe-init-build-env
oe-init-build-env是yocto构建环境运行的第一个脚本,通过运行下面的命令: . oe-init-build-env build-arm64 即可对yocto项目进行构建,顾名思义,该 ...
- python实现atm机基本操作及购物车
一.需求分析 ATM机要为用户提供转账,提现,还款,付款,消费流水,操作记录等操作接口 ATM机要为管理员提供创建用户,冻结解冻,修改额度的功能 ATM机管理员认证使用装饰器来实现 购物车要提供管理员 ...
- 基础的 sparkSQL操作
spark连接mysql操作 数据库jdbc 连接封装 package test.com import org.apache.spark.sql.{DataFrame, SparkSession} / ...
- Linux(Contos7.5)环境搭建之Gitblit安装(三)
1.yum安装git(这一步暂时不清楚是否必要,因为在window上搭建并不需要)
- No.100_第一次团队会议
任务的确立 这次会议,我们的主要目标是确定任务: 我们的任务有以下几个选择: 学霸网站,这个项目拥有以前的前端代码,我们再使用Django后端服务.上手难度较低,环境较好. 多平台时间管理软件. 安卓 ...
- GridView的控件说明[字典]-----方便查询
GridView 控件以表格的形式显示数据,并提供对数据进行排序,选择,编辑,删除等功能. GridView能够完成的功能具体可以总结如下: 1,通过数据源控件将数据绑定到GridView控件 2,对 ...
- 【CSAPP笔记】10. 代码优化
写程序的主要目标是使它在所有可能的情况下都能正确运行(bug free),一个运行得很快但有 bug 的程序是毫无用处的.在 bug free 的基础上,程序员必须写出清晰简洁的代码,这样做是为了今后 ...
- 项目冲刺Beta第三篇博客
Beta版本冲刺计划安排 1.当天站立式会议照片: 2.工作分工: 团队成员 分工 张洪滨060 排行榜界面美化 陈敬轩059 注册成功界面美化 黄兴067 登录界面美化 林国梽068 答题界 ...
- 简单的树(summary)
实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记下了他认为的各个地点的小偷数量. 现在我们将Bibi的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节点,节点 ...
- MongoDB安装笔记
2017年11月17日,在Windows Service 2008R2上成功安装MongoDB. 版本:mongodb-win32-x86_64-2008plus-ssl-3.4.6-signed.m ...