【描述】

公元19881231年,一颗巨大的陨石坠落在世界的政治文化中心cs。于是,灾难降临了,地球上出现了一系列反常的现象。当人们焦急万分的时候,一支由cs科学家组成的考察队赶到了出事地点。经过一番侦察,科学家们发现陨石上刻有若干行密文,每一行都包含5个整数:
 1 1 1 1 6
 0 0 6 3 57
 8 0 11 3 2845
著名的科学家yh发现,这些密文实际上是一种复杂运算的结果。为了便于大家理解这种运算,他定义了一种yh表达式:
1. yh表达式是仅由'{','}','[',']','(',')'组成的字符串。
2. 一个空串是yh表达式。
3. 如果A是yh表达式,且A中不含字符'{','}','[',']',则(A)是yh表达式。
4. 如果A是yh表达式,且A中不含字符'{','}',则[A]是yh表达式。
5. 如果A是yh表达式,则{A}是yh表达式。
6. 如果A和B都是yh表达式,则AB也是yh表达式。
例如  ()(())[] , {()[()]}, {{[[(())]]}} 都是yh表达式。
而 ()([])() , [() 都不是SS表达式。
并且,我们定义,该串总的括号最大层数为该串的深度,例如(){()}[]的深度为2。
密文中的复杂运算是这样进行的:
设密文中每行前4个数依次为L1,L2,L3,D,求出所有深度为D,含有L1对{},L2对[],L3对()的SS串的个数,并用这个数对数11380求余数,这个余数就是密文中每行的第5个数,我们称之为神秘数。
密文中某些行的第五个数已经模糊不清,而这些数字正是揭开陨石秘密的钥匙。现在科学家们聘请你来计算这个神秘数。

【输入格式】

共一行,4个整数L1,L2,L3,D。相邻两个数之间用一个空格分隔。

【输出格式】

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

【样例输入】

1 1 1 2

【样例输出】

8

【数据范围】

L1,L2,L3<=10,D<=30。

【分析】

恩,很明白,不会……

然后搜题解,找到了BYD大牛。

于是看了题解,于是会了。囧。

以下引用BYD大牛的题解:

“容易看出是动态规划,但是状态转移方程容易考虑不周全。

题目中样例的8种方案为

{[]()} {()[]} {}[()] [()]{} []{()} {()}[] (){[]} {[]}()

可以看出每个SS表达式都可以看成由几个小的SS组成,组成方式可能是嵌套或者连接。如果是嵌套(包括仅1层),我们把这个嵌套体看作一个整体部分,称为一个组。则每个SS表达式都是由几个组连接而成了。

设定 F[p1,p2,p3,d]为深度不超过d,包含p1个{},p2个[],p3个()的SS表达式的可能组成的方案数。S[p1,p2,p3,d]为深度不超过d,包含p1个{},p2个[],p3个()的一个组的可能组成的方案数。

则状态转移方程为

S[p1,p2,p3,d]={0 (p1==p2==p3==0)F[p1-1,p2,p3,d-1] (p1>=1)F[p1,p2-1,p3,d-1] (p1==0 && p2>=1)F[p1,p2,p3-1,d-1] (p1==0 && p2==0 && p3>=1)}

F[p1,p2,p3,d]=Σ(S[x1,x2,x3,d]*F[p1-x1,p2-x2,p3-x3,d]) (0<=x1<=p1,0<=x2<=p2,0<=x3<=p3且x1,x2,x3不同时为0)

初始条件

  • F[0,0,0,i]=1 (0<=i<=D)

最终的结果就是

  • F[L1,L2,L3,D]-F[L1,L2,L3,D-1]”
引用完毕。
#include <stdio.h>
#define maxn 35int f[maxn][maxn][maxn][maxn];
int l1,l2,l3,d,ans,base=11380;
int dp(int p1,int p2,int p3,int d);int s(int p1,int p2,int p3,int d)
{if (p1) return dp(p1-1,p2,p3,d-1);if (p2) return dp(p1,p2-1,p3,d-1);return dp(p1,p2,p3-1,d-1);
}int dp(int p1,int p2,int p3,int d)
{if (d<0) return 0;if (f[p1][p2][p3][d]==-1){f[p1][p2][p3][d]=0;for (int x1=0;x1<=p1;++x1)for (int x2=0;x2<=p2;++x2)for (int x3=0;x3<=p3;++x3){if (x1+x2+x3==0) continue;f[p1][p2][p3][d]+=(s(x1,x2,x3,d)*dp(p1-x1,p2-x2,p3-x3,d))%base;f[p1][p2][p3][d]%=base;}}return f[p1][p2][p3][d];
}int main()
{freopen("secret.in","r",stdin);freopen("secret.out","w",stdout);scanf("%d%d%d%d",&l1,&l2,&l3,&d);for (int i=0;i<=d;++i){for (int p1=0;p1<=l1;++p1)for (int p2=0;p2<=l2;++p2)for (int p3=0;p3<=l3;++p3)f[p1][p2][p3][i]=-1;f[0][0][0][i]=1;}ans=dp(l1,l2,l3,d)-dp(l1,l2,l3,d-1);ans=(ans+base)%base;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/sephirothlee/archive/2010/09/25/1834775.html

[恩难到了]陨石的秘密相关推荐

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

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

  2. 【POJ 1187】 陨石的秘密(dp)

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

  3. [POJ1187] 陨石的秘密

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

  4. 佛说父母恩难报经原文、译文

    [闻如是] 确实是我亲耳听到佛陀这样说的. [一时婆伽婆在舍卫城,祇树给孤独园] 一时,世尊在舍卫城,祇树给孤独园这个地方. [尔时世尊告诸比丘:"父母於子,有大增益,乳哺长养,随时将育,四 ...

  5. poj 1187 陨石的秘密

    动态规划 一开始定义为dp[l1][l2][l3][dd],表示用l1个{},l2个[],l3个(),深度为dd的方案数,后来不行.参考别人后,dp[l1][l2][l3][dd]表示深度小于等于dd ...

  6. POJ1187 陨石的秘密 【题解】 线性DP

    题面:http://poj.org/problem?id=1187 很自然想到设f[i][j][k][d]为i个小括号,j个中括号,k个大括号,深度小于等于d的解. 那么答案自然就是f[i][j][k ...

  7. POJ的题目分类(两个版本)

    版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...

  8. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

  9. 动态规划常见类型总结

    本文针对动态规划的常见类型进行总结.虽说总结的是动态规划,但顺便把递推也放了进来.严格来说,递推不属于动态规划问题,因为动态规划不仅有递推过程,还要有决策(即取最优),但广义的动态规划是可以包含递推的 ...

最新文章

  1. Eclipse安装Svn无法连接问题
  2. MQ对比之RabbitMQ Redis
  3. Python2与Python3的区别:
  4. 【两分钟带你了解树】数据结构04-树结构的概述
  5. DOS命令大全(一)
  6. .Net程序调试与追踪的一些方法
  7. 邮局-[IOI2000](四边形不等式)
  8. CC1310在868MHz的电路设计
  9. 犹太人从未透露的12个秘密(图)
  10. java图形界面颜色随机变换,JavaScript实现鼠标移入随机变换颜色
  11. 软考信息安全工程师学习笔记三(1.3 信息安全管理基础)
  12. Docker:Docker 性质及版本选择 [三]
  13. jquery通过id或name获取标签的值,以及简单的js正则表达式
  14. springboot学习总结
  15. 五笔字根表识别码图_五笔字根表键盘图下载|8698版五笔字根表键盘图高清大图_ - 极光下载站...
  16. 树莓派做微信公众号服务器,树莓派与微信公众号对接(python)
  17. ad模数转换采集电压程序c语言,单片机怎么通过AD转换得到电压值
  18. 交换机和路由器的基本命令
  19. 路由器的虚拟服务器干嘛用的,dmz和虚拟服务器(tp路由器虚拟服务器能干嘛)...
  20. 【转帖】 嵌入式路线狂人计划--------个人认为。

热门文章

  1. oracle cdc 提交顺序,Oracle CDC部署流程
  2. php二分搜索,php如何实现二分搜索法
  3. jenkins获取远程服务器文件,Jenkins用SSH传输文件到远程服务器
  4. 撩课mysql_撩课-Mysql第20部分索引
  5. mysql中关系怎么弄_mysql数据库关系操作
  6. 如何启用计算机超级账户,win7如何启用超级管理员账户 win7启用超级管理员账户方法介绍...
  7. java 函数式编程_函数式编程杂谈
  8. Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)
  9. TensorFlow(2)图(默认图与自定义图) TensorBoard可视化
  10. OpenCV(项目)车牌识别3 -- 模板匹配