问题描述

公元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个数,我们称之为神秘数。

密文中某些行的第五个数已经模糊不清,而这些数字正是揭开陨石秘密的钥匙。现在科学家们聘请你来计算这个神秘数。

输入格式

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

输出格式

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

样例输入

1 1 1 2

样例输出

8

题解

显然是一道动态规划的题目。对于这些变量,设\(f[i][j][k][d]\)表示串中有i个()、j个[]、k个{}、深度不大于d时的方案总数。由定义可知,两个SS串拼在一起也是一个SS串,我们可以借此来进行动态规划。但是,若一个SS串为ABC,在计算时就会将AB+C和A+BC作为两个方案计算在内,但实际上是同一种方案。因此,为了避免重复,可以在动态规划时令一个串强制在最外面加上一个括号(满足要求的最小括号)。所以,首先枚举一个串中有的每种括号的数量,然后把所有括号分成两部分,对答案的贡献即为分成的两个串的乘积。注意取模。

代码

#include <iostream>
#include <cstdio>
using namespace std;
const int mod=11380;
int l1,l2,l3,d,f[12][12][12][32],i,j,k,l,a,b,c;
int main()
{
cin>>l1>>l2>>l3>>d;
f[0][0][0][0]=1;
for(i=0;i<=l1;i++){
for(j=0;j<=l2;j++){
for(k=0;k<=l3;k++){
for(l=1;l<=d;l++){
if(i!=0||j!=0||k!=0){
int tmp=0;
for(a=0;a<k;a++) tmp=(tmp+f[i][j][k-a-1][l]*f[0][0][a][l-1])%mod;
for(a=0;a<j;a++){
for(b=0;b<=k;b++) tmp=(tmp+f[i][j-a-1][k-b][l]*f[0][a][b][l-1])%mod;
}
for(a=0;a<i;a++){
for(b=0;b<=j;b++){
for(c=0;c<=k;c++) tmp=(tmp+f[i-a-1][j-b][k-c][l]*f[a][b][c][l-1])%mod;
}
}
f[i][j][k][l]=tmp;
}
else f[i][j][k][l]=1;
}
}
}
}
int ans=0;
if(d>0) ans=(f[l1][l2][l3][d]-f[l1][l2][l3][d-1]+mod)%mod;
else ans=f[l1][l2][l3][d];
cout<<ans<<endl;
return 0;
}

[POJ1187] 陨石的秘密的更多相关文章

  1. Genotype&&陨石的秘密

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

  2. 【POJ1187】陨石的秘密

    题目大意: 定义一个串:只含有 '( )','[ ]','{ }',3种(6个)字符. 定义 SS 串: 空串是SS表达式. 若A是SS表达式,且A串中不含有中括号和大括号,则(A)是SS表达式. 若 ...

  3. 题解 【POJ1187】 陨石的秘密

    解析 考虑到数据范围,其实我们可以用记搜. 设\(f[a][b][c][d]\)表示还剩\(a\)个'{}',\(b\)个"[]",\(c\)个"()",深度\ ...

  4. poj[1187][Noi 01]陨石的秘密

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

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

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

  6. AcWing 317. 陨石的秘密

    1 -> {} 2 -> [] 3 -> () \(f[d][a][b][c]\) 表示 \([i * 2 - 1, j * 2]\) 这段区间 深度为 d \(1\) 有 \(a\ ...

  7. 常规DP专题练习

    POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...

  8. 别人整理的DP大全(转)

    动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  9. dp题目列表

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

随机推荐

  1. H5音乐播放方案

    环境:移动端.浏览器.微信 问题:音乐不自动播放问题 原因: 1.微信端(前置条件添加音乐的时候一定要设置自动播放),有的时候同一款手机.统一个微信版本,会出现音乐不自动播放的问题,无解~~~~~~~ ...

  2. URL里的分号';'一定要编码为%3b!!!!

    http://en.wikipedia.org/wiki/Query_string The series of pairs is separated by the ampersand, '&' ...

  3. TypeError: list indices must be integers or slices, not str

    错误如下: TypeError: list indices must be integers or slices, not str 错误代码块: aa是一组list套dict数据 函数insert接收 ...

  4. 阶段1 语言基础+高级_1-2 -面向对象和封装_14private关键字的作用及使用

    新建一个类Person代表人 创建demo03Person类去调用Person这个类 年龄设置为负数.虽然可以设置为负数.但是这个数值不合理 外部访问这个age就会报错 负数设置不进来.正数也设置不了 ...

  5. DataTable clone()和copy()的区别

    clone()只是复制表结构 copy()是深度复制,表结构和数据

  6. Spring MVC配置文件

    都说开发Spring Web程序的配置文件很繁琐,所以就写了一篇配置博客, 首先是pom.xml文件 <project xmlns="http://maven.apache.org/P ...

  7. 谷歌,火狐浏览器不能禁用自动补齐的bug缺陷

    IE浏览器里有autocomplete="off",可以禁止自动补全账号和密码,为了防止信息泄露,需要去除自动补齐. 自动补齐产生的场景是,form里面有密码框,因此只要将该密码框 ...

  8. 华为交换机SOCK CPU占用率高处理方法

    问题截图: 解决方法: cpu-defend policy cpu auto-defend enable auto-defend attack-packet sample 5 auto-defend ...

  9. 如何使用IDEA将项目上传到GitHub中

    上传之前先规定上传的格式: 1 . 以后所有上传的项目,都只上传 src文件集以及pom.xml文件,不要带有自己的 .idea配置文件或者target运行文件之类的(就算是测试文件也一样,从开始就养 ...

  10. 面试题思考:Stack和Heap的区别 栈和堆的区别

    堆栈的概念: 堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常 ...