BZOJ1566 [NOI2009]管道取珠
这是一道思维复杂度很高的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]管道取珠相关推荐
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1659 Solved: 971 Description I ...
- [NOI2009]管道取珠
题目描述 管道取珠是小X很喜欢的一款游戏.在本题中,我们将考虑该游戏的一个简单改版.游戏画面如图1所示: (图1) 游戏初始时,左侧上下两个管道分别有一定数量的小球(有深色球和浅色球两种类型),而右侧 ...
- 洛谷P1758 [NOI2009]管道取珠(dp 贡献转化)
题目 bzoj1566 两个管道的小球序列, 分别用长为n(n<=500)和长为m(m<=500)的仅由A和B构成的字符串表示 两个管道归并的时候,每次可以从上管道取一个球,也可以从下管道 ...
- 洛谷 - P1758 [NOI2009]管道取珠(计数dp)
题目链接:点击查看 题目大意:给出两个长度分别为 n 和 m 的管道,每个管道中都只有两种颜色的珠子,现在可以按照规则组成序列,共可以组成 C( n+m , n ) 个序列,假设共组成了 K 种不同的 ...
- BZOJ1566:[NOI2009]管道取珠——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目 ...
- Bzoj 1566: [NOI2009]管道取珠(动态规划-神题)
以下内容来自ShallWe's Blog 题目 题目链接 Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道 ...
- 牛客网 【每日一题】5月29日 管道取珠
链接: 文章目录 题目描述 题意: 题解: 代码: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld ...
- P1758-[NOI2009]管道取珠【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P1758 题目大意 给出一个大小为nnn和一个大小为mmm的栈,每次选择一个栈弹出栈顶然后记录这个字母,求所有弹出序 ...
- 2017.10.28 管道取珠 失败总结
这个题有一个新套路: ∑ai^2 要知道一般的计数题是∑ai,,所以这多乘了一个自己有什么意义呢? 于是想到,两两枚举,加起来正好是ai^2:: 所以就有一个想法,枚举两种取法, 然后就是插数dp, ...
最新文章
- 雷林鹏分享:MySQL 及 SQL 注入
- 《用Python进行自然语言处理》第 11 章 语言数据管理
- OpenGL 坐标系统(Perspective)
- JMeter 下载安装教程
- Angular Change Detection 的学习笔记
- DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.0.7Beta) 增加多语言!
- numpy序列预处理dna序列_干货 :教你一文掌握数据预处理
- BUG搬运工:CSCvp31778-3802 apsw_watchdog: WARNING: System memory is running low
- spring - ioc和aop
- 导入train_test_split时,ModuleNotFoundError: No module named 'sklearn.cross_validation'
- java计算机毕业设计ssm+vue高校科研管理系统
- linux vrrp 配置命令,华为交换机VRRP配置实例收集(转)
- 目标跟踪数据集整理(三)----GOT-10k
- 生信学习入门常见错误可能的原因分类总结和求助指南
- Vue的生命周期是什么
- ElasticSearch健康检查localhost:9200 not reachable
- Cascading Convolutional Color Constancy
- 网站访问量统计实现.
- java中的对象是什么_Java中的对象是什么以及如何使用它?
- 科目三必看要点 驾驶经验汇总
热门文章
- 检测单击鼠标左键并拖动的消息_3-75 通过鼠标选择文本
- wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题
- mysql myisam 去掉表锁a_MyISAM表锁的解决方案
- mysql好玩的代码_mysql的order by与where出现的好玩事
- 用32定时器让电机缓慢转动_实验三 步进电机原理及应用
- java public object_Java_Object
- 列宽一字符等于多少厘米_字符串匹配算法总结——BF、KMP、BM
- linux6 epel yum源,CentOS6下yum源与epel源配置
- classpath*: 和classpath:有什么区别_我们可以从Java“HelloWorld”中学到什么?
- 2020年电赛题目,命题专家权威解析!