堆放木块-c#求解-英雄会在线编程题目
来源:互联网 发布:淘宝号有订单信用清洗 编辑:程序博客网 时间:2024/04/29 14:10
先看题目吧:
我们用2维数组n[i][j] 表示平面上凸起的高度。或者说在二维平面上堆放立方体,
* 满足 (每个数组元素都是非负整数)
n[i][j] <= n[i][j+1]
n[i][j] <= n[i+1][j]
如上图所示,是一种合法的方法。
对应的二维数组是
5 4 2 1 1
3 2 0 0 0
2 2 0 0 0
(注意正方向是从下往上,从右往左)
给定a,b,c,其中a,b是2维数组的维数,c表示元素不超过c(即n[i][j] <= c),求满足条件的2维数组数。
(0<a,b,c<=6)
分析:
最开始拿到这道题,直觉就是把a*b化成更简单的,怎么化简,试了很多种,结果都不理想,后来没办法,直接上暴力穷举,呵呵,对于a,b,c,只要都不超过5,那么还是瞬间就得到答案了,可是,》=5时,时间就成几何级增加。
还是说说可行的解题思路:
考虑最后一个格子n[a][b],可以堆放的木块数为(0~c)种,
在考虑其右侧的格子n[a][b-1],
当n[a][b-1]=c,那么n[a][b]可以取(c),共1种
当n[a][b-1]=c-1,那么n[a][b]可以取(c-1~c),共2种
.........................................................................
当n[a][b-1]=0,那么n[a][b]可以取(0~c),共有c+1种
同理,可以推出
当n[a][b-2]=c,那么n[a][b-1]可以取(c),共1种
当n[a][b-2]=c-1,那么n[a][b-1]可以取(c-1~c),共1+2=3种
可以看出,右侧的格子是左侧格子分别取每种状态的和,当然,这只是求出来的一行的情况
下面就要考虑多行,毕竟a不可能只等于1
前面分析列的思路可以用到分析行,只是有一点需要注意,结果集并不是单调递增的,在上面分析的时候,取值0~c是单调递增的,而分析行就不一定了,
距离来说a,b,c为2,2,3
行有{(0,0),(1,0),(2,0),(1,1),(2,1),(2,2)六种情况
其中(2,0)和(1,1)就不存在单调递增情况,所以要进行分类,即大于(0,0)的是那些,大于(1,0)是那些
然后从最上面一行往下分析,就可以得到答案了
结果就能很快计算出来。
- 堆放木块-c#求解-英雄会在线编程题目
- 平衡二叉树--c#求解--英雄会在线编程题目
- 朋友的礼物-c#求解-英雄会在线编程题目
- 建立信号基站-c#求解-英雄会在线编程题目
- 罐子和硬币-c#求解-英雄会在线编程题目
- 排列搜索-c#求解-英雄会在线编程题目
- 二叉树-c#求解-英雄会在线编程题目
- P次方数-c#求解-英雄会在线编程题目
- P次方数-c#求解-英雄会在线编程题目
- 无穷字符串-c#求解-英雄会在线编程题目
- 数列问题-c#求解-英雄会在线编程题目
- 最小操作数-c#求解-英雄会在线编程题目
- 24点游戏-c#求解-英雄会在线编程题目
- xor值最大-c#求解-英雄会在线编程题目
- 彩色石子-c#求解-英雄会在线编程题目
- -3+1-c#求解-英雄会在线编程题目
- F(X)--c#求解-英雄会在线编程题目
- 另类编辑距离-c#求解-英雄会在线编程题目
- IOS面试题
- Python是如何进行内存管理的
- ubuntu下signal()函数的行为
- POJ1915:Knight Moves(BFS)
- 南阳理工OJ_题目52 无聊的小明
- 堆放木块-c#求解-英雄会在线编程题目
- 23种设计模式之python实现--单例模式
- utuntu11.10升级到了12.04==设置root登入图像界面
- 筛法求素数
- 【矩形嵌套 16 动态规划 NYOJ】
- seoer关于导出链接误区剖析,站长必看
- 单例模式
- Android 笔记2
- HDU 2896 病毒侵袭 ac自动机(简单)