题目链接:https://cn.vjudge.net/problem/HYSBZ-1566

题意



思路

已经说了,面对\sum a^2的时候把状态分两个,

当这两个状态相同时,满足题意的方案数即变为a^2

提交过程

WA 不知道为啥正着做dp总是WA
AC

代码

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=500+5;
const int mod=1024523;
int dp[2][maxn][maxn];
int n, m;
char strn[maxn], strm[maxn]; int main(void){
while (scanf("%d%d", &n, &m)==2){
scanf("%s%s", strn+1, strm+1);
// string strn, strm;
// cin >> strn >> strm;
// strn.push_back('X');
// strm.push_back('X');
// reverse(strn.begin(), strn.end());
// reverse(strm.begin(), strm.end()); dp[0][0][0]=1;
int idx=0;
for (int i=0; i<=n; i++, idx=1-idx)
for (int j=0; j<=m; j++)
for (int k=0; k<=n; k++){
int &d=dp[idx][j][k], l=i+j-k; if (d==0 || l<0 || l>m) continue;
if (strn[i+1]==strn[k+1]) dp[1-idx][j][k+1]=(d+dp[1-idx][j][k+1])%mod;
if (strn[i+1]==strm[l+1]) dp[1-idx][j][k]=(d+dp[1-idx][j][k])%mod;
if (strm[j+1]==strn[k+1]) dp[idx][j+1][k+1]=(d+dp[idx][j+1][k+1])%mod;
if (strm[j+1]==strm[l+1]) dp[idx][j+1][k]=(d+dp[idx][j+1][k])%mod;
d=0;
}
printf("%d\n", (dp[idx][m][n]+mod)%mod);
} return 0;
}
Time Memory Length Lang Submitted
1076ms 3280kB 1279 C++ 2018-08-14 01:53:46

HYSBZ-1566 管道取珠 区间dp的更多相关文章

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

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

  2. BZOJ 1566 管道取珠(DP)

    求方案数的平方之和.这个看起来很难解决.如果转化为求方案数的有序对的个数.那么就相当于求A和B同时取,最后序列一样的种数. 令dp[i][j][k]表示A在上管道取了i个,下管道取了j个,B在上管道取 ...

  3. NOI2009 管道取珠 神仙DP

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

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

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

  5. [BZOJ 1566] 管道取珠

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1566 Solution: 思路十分精奇的一道题目 题目要求的是$\sum_{i=1}^k ...

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

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

  7. P1758-[NOI2009]管道取珠【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P1758 题目大意 给出一个大小为\(n\)和一个大小为\(m\)的栈,每次选择一个栈弹出栈顶然后记录这个字母,求所 ...

  8. NOI2009管道取珠(dp)

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

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

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

随机推荐

  1. 网络教程(2)光纤和RF编码简介

    光纤: 想象一个symbol是light off 另一个是light on 另一种传输信息的方式using radio waves(无线电波: 这个router 内部以很高的频率变换电压 (例如2.4 ...

  2. UVA1586 - Molar mass(紫书习题3.2)

    HJL是一个从不讽刺人的品学兼优的好孩子,她最近沉迷学习化学而不能自拔.然而计算一个分子的相对分子质量使她烦不胜烦,因此她决定请你写一个程序来帮助她计算这种麻烦的事情. 已知: ①C代表的碳元素的相对 ...

  3. 3.1、Jinja2模板引擎

    形式最简单的 Jinja2 模板就是一个包含响应文本的文件.示例 3-1 是一个 Jinja2 模板,它和示例 2-1 中 index() 视图函数的响应一样. 示例 3-1 templates/in ...

  4. Orcale-利用闪回恢复数据方法

    一.delete误删 方法1:如果表结构没有改变,直接闪回整个表,具体步骤: --首先需要表闪回权限,开启行移动功能 alter table 表名 enable row movement; --执行闪 ...

  5. struct 模块解决 TCP黏包问题

    首先来看一下产生黏包现象的一段代码: # server.py 服务端 import socket ​ sk = socket.socket() sk.bind(('127.0.0.1',9000)) ...

  6. [HTML5] aria-label & aria-labelledby

    'aria-labelledby' overwrite 'aria-label' overwirte native element label. TOP-LEFT: aria-label overwr ...

  7. 多线程的join和interrupt

    你可以在一个线程1里添加线程2对象thread的join方法来让线程1处于等待的状态 ,同时也可以调用thread.interrupt()来打断等待状态,此处注意 interrupt应在线程1开启st ...

  8. Wing IDE配置空格取代tab缩进+护眼背景色

    打开Wing IDE后,进入"编辑"列的"偏好设置"页面,如图1所看到的: 图1 设置用4个spaces取代tab, 如图2所看到的 图2 设置保护眼睛的绿色, ...

  9. Redis通过命令行进行配置

    redis 127.0.0.1:6379[1]> config set requirepass my_redis OK redis 127.0.0.1:6379[1]> config ge ...

  10. Swift - 分页菜单的实现(使用PagingMenuController库实现tab标签切换)

    分页菜单(分段菜单)在许多 App 上都会用到.比如大多数新闻 App,如网易新闻.今日头条等,顶部都有个导航菜单.这个导航菜单是一组标签的集合,每个标签表示一个新闻类别,我们点击这个标签后下面就会切 ...