1710
来源:互联网 发布:淘宝女装精品装修图片 编辑:程序博客网 时间:2024/05/05 22:13
分析
看到一道题目没有思路时,要先将这道题目简单化。这道题目与“多滋味的咖啡”那道题十分的相似,所以很容易想到递推(DP)。但那么多层,还有可能会有空位,怎么一步一步推出结果呢?
先将此题简单化,变成一维,且不能有空位,这样我们就可以很轻松地实现。
设f[i]为 积木连接成一条长为i的长条的方案总数,则 f[i]=f[i-1]+f[i-2]+…+f[i-k]。
但是再进一步,将题目变成一维,有空位,我们该怎么办呢?
若一段中有一个空格,这样就分成了两部分,然后不断划分,最终若连接成一条长为i的长条,则最终的答案就等于两边的方案数的乘积。
那么最棘手的问题解决了,现在就可以分析原问题了,看一下注意事项:砖块任何部分的正下方都必须要有其他砖块或者是地基。这个是动态规划的关键点,通过这个可以得到一个状态转移方程:
现在设g[i][j]表示:底座长为j,高度出超过i的方案总数。那么:就可以得到从下往上推的步骤,其中f[]存的是一维无空位的情况(见上),按照这个步骤一直往上推g[H][W]就是最终的答案。
for( int i=1; i<=H; i++) for( int j=0; j<=W; j++) { g[i][j]=g[i-1][j]%Mod*f[j]%Mod; for( int k=1; k<=j; k++) { g[i][j]+=g[i-1][j-k]%Mod*f[j-k]%Mod*g[i][k-1]%Mod, g[i][j]%=Mod; //用到的是上面含空格两边相乘的原理 } }
理解好上面的程序段,解决这道问题就不难了。
1 0
- 1710
- HDOJ 1710
- HDU 1710
- 洛谷 1710
- ZOJ 1710 The Snail
- ZOJ 1710 The Snail
- 1710: 最后一个1
- ZJNU 1710 dfs
- HDU 1710 已知前序中序须求后序。
- 洛谷1710 地铁涨价
- HDU 1710 二叉树水题
- ZCMU—1710
- CodeVS 1710 生日蛋糕 题解
- codevs 1710 生日蛋糕
- 1710--1804书单
- DevExperience(1710)
- fjnu 1710 保龄球娱乐计分
- HDU 1710-Binary Tree Traversals
- python 形参与实参及默认参数的性质
- POJ 2524
- Hibernate—检索策略
- struts-2.3登录设计
- matlab读取、显示.mat文件
- 1710
- 紫书搜索 例题7-4 UVA
- SpringMVC jsp页面表单 与 后台bean的映射关系
- Java的关键字及分类
- Hibernate查询
- makefile多文件编译
- CodeForces 716A
- Eclipse 运行web project,出现Server Tomcat v9.0 Server at localhost failed to start.错误
- 互操作之DotnetFramework跨平台解决方案