这是一道思维复杂度很高的DP题

看题目,为什么是取两次序列一样呢?YY一下,其实等价于两个人一起取,最后序列一样。

然后就水了:

令f[i, j, k]表示取到第i个珠子,第一个人在1号管道取了j个珠子,第二个人在1号管道取了k个珠子时,他们取出的序列相等的方案数

于是真水了!!!(方程请自行脑补或看程序呗)

然后我那坑爹的编程能力,1个小时啊大爷的。。。

 1 /**************************************************************
 2     Problem: 1566
 3     User: rausen
 4     Language: Pascal
 5     Result: Accepted
 6     Time:11920 ms
 7     Memory:3592 kb
 8 ****************************************************************/
 9
10 const prime = 1024523;
11
12 var
13   s1, s2 : array[0..600] of char;
14   m, n, i, j, k, j1, k1 : longint;
15   p, q : longint;
16   f : array[0..1, 0..600, 0..600] of longint;
17
18 procedure reverse;
19 var
20   s : ansistring;
21   i : longint;
22
23 begin
24   readln(s);
25   for i := 1 to m do
26     s1[m - i + 1] := s[i];
27   readln(s);
28   for i := 1 to n do
29     s2[n - i + 1] := s[i];
30 end;
31
32 begin
33   readln(m, n);
34   reverse;
35   f[0, 1, 1] := 1;
36   for i := 1 to m + n + 1 do begin
37     p := i mod 2;
38     q := p xor 1;
39     fillchar(f[p], sizeof(f[p]), 0);
40     for j := 1 to m + 1 do
41       for k := 1 to m + 1 do
42         while f[q, j, k] >= prime do
43           dec(f[q, j, k], prime);
44     for j := 1 to m + 1 do
45       for k := 1 to m + 1 do begin
46         j1 := i - j + 1;
47         k1 := i - k + 1;
48         if (j1 > 0) and (k1 > 0) and (j1 <= n + 1) and (k1 <= n + 1) then begin
49           if s1[j] = s1[k] then inc(f[p, j + 1, k + 1], f[q, j, k]);
50           if s1[j] = s2[k1] then inc(f[p, j + 1, k], f[q, j ,k]);
51           if s2[j1] = s1[k] then inc(f[p, j, k + 1], f[q, j ,k]);
52           if s2[j1] = s2[k1] then inc(f[p, j, k], f[q, j, k]);
53         end;
54       end;
55   end;
56   writeln(f[q, m + 1, m + 1]);
57 end.

View Code

(p.s. 上面↑是以前打的,所以还是Pascal写的)

转载于:https://www.cnblogs.com/rausen/p/4027484.html

BZOJ1566 [NOI2009]管道取珠相关推荐

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

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

  2. [NOI2009]管道取珠

    题目描述 管道取珠是小X很喜欢的一款游戏.在本题中,我们将考虑该游戏的一个简单改版.游戏画面如图1所示: (图1) 游戏初始时,左侧上下两个管道分别有一定数量的小球(有深色球和浅色球两种类型),而右侧 ...

  3. 洛谷P1758 [NOI2009]管道取珠(dp 贡献转化)

    题目 bzoj1566 两个管道的小球序列, 分别用长为n(n<=500)和长为m(m<=500)的仅由A和B构成的字符串表示 两个管道归并的时候,每次可以从上管道取一个球,也可以从下管道 ...

  4. 洛谷 - P1758 [NOI2009]管道取珠(计数dp)

    题目链接:点击查看 题目大意:给出两个长度分别为 n 和 m 的管道,每个管道中都只有两种颜色的珠子,现在可以按照规则组成序列,共可以组成 C( n+m , n ) 个序列,假设共组成了 K 种不同的 ...

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

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

  6. Bzoj 1566: [NOI2009]管道取珠(动态规划-神题)

    以下内容来自ShallWe's Blog 题目 题目链接 Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道 ...

  7. 牛客网 【每日一题】5月29日 管道取珠

    链接: 文章目录 题目描述 题意: 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld ...

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

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

  9. 2017.10.28 管道取珠 失败总结

    这个题有一个新套路:  ∑ai^2 要知道一般的计数题是∑ai,,所以这多乘了一个自己有什么意义呢? 于是想到,两两枚举,加起来正好是ai^2:: 所以就有一个想法,枚举两种取法, 然后就是插数dp, ...

最新文章

  1. 雷林鹏分享:MySQL 及 SQL 注入
  2. 《用Python进行自然语言处理》第 11 章 语言数据管理
  3. OpenGL 坐标系统(Perspective)
  4. JMeter 下载安装教程
  5. Angular Change Detection 的学习笔记
  6. DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.0.7Beta) 增加多语言!
  7. numpy序列预处理dna序列_干货 :教你一文掌握数据预处理
  8. BUG搬运工:CSCvp31778-3802 apsw_watchdog: WARNING: System memory is running low
  9. spring - ioc和aop
  10. 导入train_test_split时,ModuleNotFoundError: No module named 'sklearn.cross_validation'
  11. java计算机毕业设计ssm+vue高校科研管理系统
  12. linux vrrp 配置命令,华为交换机VRRP配置实例收集(转)
  13. 目标跟踪数据集整理(三)----GOT-10k
  14. 生信学习入门常见错误可能的原因分类总结和求助指南
  15. Vue的生命周期是什么
  16. ElasticSearch健康检查localhost:9200 not reachable
  17. Cascading Convolutional Color Constancy
  18. 网站访问量统计实现.
  19. java中的对象是什么_Java中的对象是什么以及如何使用它?
  20. 科目三必看要点 驾驶经验汇总

热门文章

  1. 检测单击鼠标左键并拖动的消息_3-75 通过鼠标选择文本
  2. wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题
  3. mysql myisam 去掉表锁a_MyISAM表锁的解决方案
  4. mysql好玩的代码_mysql的order by与where出现的好玩事
  5. 用32定时器让电机缓慢转动_实验三 步进电机原理及应用
  6. java public object_Java_Object
  7. 列宽一字符等于多少厘米_字符串匹配算法总结——BF、KMP、BM
  8. linux6 epel yum源,CentOS6下yum源与epel源配置
  9. classpath*: 和classpath:有什么区别_我们可以从Java“HelloWorld”中学到什么?
  10. 2020年电赛题目,命题专家权威解析!