Description

公元11380年,一颗巨大的陨石坠落在南极。于是,灾难降临了,地球上出现了一系列反常的现象。当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点。经过一番侦察,科学家们发现陨石上刻有若干行密文,每一行都包含5个整数: 
1 1 1 1 6 
0 0 6 3 57 
8 0 11 3 2845 
著名的科学家SS发现,这些密文实际上是一种复杂运算的结果。为了便于大家理解这种运算,他定义了一种SS表达式: 
1. SS表达式是仅由'{','}','[',']','(',')'组成的字符串。 
2. 一个空串是SS表达式。 
3. 如果A是SS表达式,且A中不含字符'{','}','[',']',则(A)是SS表达式。 
4. 如果A是SS表达式,且A中不含字符'{','}',则[A]是SS表达式。 
5. 如果A是SS表达式,则{A}是SS表达式。 
6. 如果A和B都是SS表达式,则AB也是SS表达式。

例如 
()(())[] 
{()[()]} 
{{[[(())]]}} 
都是SS表达式。 
而 
()([])() 
[() 
不是SS表达式。

一个SS表达式E的深度D(E)定义如下: 
 
例如(){()}[]的深度为2。

密文中的复杂运算是这样进行的: 
设密文中每行前4个数依次为L1,L2,L3,D,求出所有深度为D,含有L1对{},L2对[],L3对()的SS串的个数,并用这个数对当前的年份11380求余数,这个余数就是密文中每行的第5个数,我们称之为?神秘数?。 
密文中某些行的第五个数已经模糊不清,而这些数字正是揭开陨石秘密的钥匙。现在科学家们聘请你来计算这个神秘数。 

Input

共一行,4个整数L1,L2,L3,D。相邻两个数之间用一个空格分隔。 
(0 <= L1 <= 10,0 <= L2 <= 10,0 <= L3 <= 10,0 <= D <= 30)

Output

共一行,包含一个整数,即神秘数。

Sample Input

Sample Output

  1.  

题解

字符串dp

将每个字符串表示为四元组(d,a,b,c),

d->串的深度上限,即该串深度≤d,

a->L1,

b->L2,

c->L3,

计数原理:对于每个当前串A,将其分割为两个串加上任意括号得到的方案数必然为两串的方案数之积。

证明:

举个例子

例如字符串(d,a,b,c)分成了(d,x,y,z)和(d-1,u,v,w),前者包含了S、R、O的三种实现方案,后者包含了A、E、X、Q的四种实现方案

那么方案数为SA\SE\SX\SQ\RA\RE\RX\RQ\OA\OE\OX\Q

即3*4种

之后,对于每个字符串(d,a,b,c),对于深度d的计数可以只考虑(d,x,y,z)和(d-1,u,v,w)(依题意,AB字符串深度为A、B中最大深度)

在此基础上,枚举对该字符串加()[]{}的情况即可。

Rank Run ID User Memory Time Language Code Length Submit Time
69 16383436 ksq2013 848K 235MS G++ 874B 2016-12-11 17:44:52

程序算跑到比较快的。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. using namespace std;
  5. int f[][][][];
  6. int dp(int d,int a,int b,int c){
  7. if(!(a|b|c))
  8. return ;
  9. int tmp=;
  10. for(int i=;i<=c-;i++)
  11. tmp=(tmp+f[d][a][b][c-i-]*f[d-][][][i])%;
  12. for(int i=;i<=b-;i++)
  13. for(int j=;j<=c;j++)
  14. tmp=(tmp+f[d][a][b-i-][c-j]*f[d-][][i][j])%;
  15. for(int i=;i<=a-;i++)
  16. for(int j=;j<=b;j++)
  17. for(int k=;k<=c;k++)
  18. tmp=(tmp+f[d][a-i-][b-j][c-k]*f[d-][i][j][k])%;
  19. return f[d][a][b][c]=tmp%;
  20. }
  21. int main(){
  22. int l1,l2,l3,dep;
  23. scanf("%d%d%d%d",&l1,&l2,&l3,&dep);
  24. f[][][][]=;
  25. for(int d=;d<=dep;d++)
  26. for(int a=;a<=l1;a++)
  27. for(int b=;b<=l2;b++)
  28. for(int c=;c<=l3;c++)
  29. f[d][a][b][c]=dp(d,a,b,c);
  30. if(dep)
  31. f[dep][l1][l2][l3]=(f[dep][l1][l2][l3]+-f[dep-][l1][l2][l3])%;
  32. printf("%d\n",f[dep][l1][l2][l3]);
  33. return ;
  34. }

poj[1187][Noi 01]陨石的秘密的更多相关文章

  1. Genotype&&陨石的秘密

    Genotype: Genotype 是一个有限的基因序列.它是由大写的英文字母A-Z组成,不同的字母表示不同种类的基因.一个基因可以分化成为一对新的基因.这种分化被一个定义的规则集合所控制.每个分化 ...

  2. POJ 1187 陨石的秘密 (线性DP)

    题意: 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石上 ...

  3. POJ 1837 Balance 01背包

    题目: http://poj.org/problem?id=1837 感觉dp的题目都很难做,这道题如果不看题解不知道憋到毕业能不能做出来,转化成了01背包问题,很神奇.. #include < ...

  4. POJ 3172 Scales (01背包暴力)

    题意:给定 n 个数,保证下一个数比上一个数和前一个数之和大,然后给定一个背包,问你最多放多少容积. 析:应该是很明显的01背包,但是可惜的是,数组开不出来,那就得考虑暴力,因为数不多,才几十而已,要 ...

  5. POJ 3211 (分组01背包) Washing Clothes

    题意: 小明有一个贤妻良母型的女朋友,他们两个一起洗衣服. 有M种颜色的N件衣服,要求洗完一种颜色的衣服才能洗另外一种颜色. 两人可以同时洗,一件衣服只能被一个人洗. 给出洗每件衣服所用的时间,求两个 ...

  6. POJ 2923 Relocation(01背包变形, 状态压缩DP)

    Q: 如何判断几件物品能否被 2 辆车一次拉走? A: DP 问题. 先 dp 求解第一辆车能够装下的最大的重量, 然后计算剩下的重量之和是否小于第二辆车的 capacity, 若小于, 这 OK. ...

  7. POJ 2184(01背包)(负体积)

    http://poj.org/problem?id=2184 http://blog.csdn.net/liuqiyao_01/article/details/8753686 对于负体积问题,可以先定 ...

  8. POJ 2923 【01背包+状态压缩/状压DP】

    题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...

  9. [POJ1187] 陨石的秘密

    问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...

随机推荐

  1. PHP中return 和 exit 、break和contiue 区别与用法

    先说一下exit函数的用法. 作用: 输出一则消息并且终止当前脚本. 如果一段文本中包括多个以 结束的脚本,则exit退出当前所在脚本. 比如一篇php文本包括一下代码,则输出为world. < ...

  2. AJAX与PHP(PHP笔记)--动态验证用户名

    在PHP基础的学习过程中经常会遇到对页面的局部刷新. 比如说,我们在填写用户名的同时,对数据库中的信息进行验证,检查是否充分. 这时就要用到AJAX实现页面的动态加载. 下面例子是简单的PHP与AJA ...

  3. 【工匠大道】svn使用总结

    原文地址 SVN(Subversion)是一个自由.开源的项目源代码版本控制工具.目前,绝大多数开源软件和企业代码管理,都使用SVN作为代码版本管理软件. Subversion将文件存放在中心版本库里 ...

  4. 去 IOE,MySQL 完胜 PostgreSQL

    本文转载自: http://www.innomysql.net/article/15612.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 前言 上周参加了2015年的中国数据库 ...

  5. 通过Laravel 初识Vue.js

    最近也在学习laravel的框, 因为之前学过tp框架, 都说laravel是最优雅的框架,所以开学后忍不住去试试这个在国外已经火的不要不要的框架. 总的来说,对于学习完tp框架后,我觉得tp毕竟是中 ...

  6. Storm的ack机制在项目应用中的坑

    正在学习storm的大兄弟们,我又来传道授业解惑了,是不是觉得自己会用ack了.好吧,那就让我开始啪啪打你们脸吧. 先说一下ACK机制: 为了保证数据能正确的被处理, 对于spout产生的每一个tup ...

  7. Play modules

    A Play application can be assembled from several application modules. This allows you to reuse appli ...

  8. 仿腾讯QQ竖直滑动导航菜单

    菜单就像qq软件的分组,鼠标经过自动显示相应组的内容. 效果体验网址:http://keleyi.com/a/bjad/nf86w2dv.htm 以下是源代码: <html> <he ...

  9. JQuery实现一个简单的鼠标跟随提示效果

    效果体验:http://hovertree.com/texiao/jsstudy/2/ 实现思路 1 鼠标移入标题(这里是<a>标签) 创建一个div,div的内容为鼠标位置的文本 将创建 ...

  10. 解决xcode升级之后安装的插件失效

    title: 解决xcode升级之后安装的插件失效date: 2015-08-23 11:07:53categories: 编辑工具 tags: xcode 我的博客:http://daycoding ...