n[i][j] <= n[i][j+1] n[i][j] <= n[i+1][j]

堆放木块是题很有意思的题目,原题的描述为:

  我们用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) 

之前我就分析过了,这题与ferrers图有很大的联系,再看看Ferrers图:

ferrers图是一个从上而下的n层格子,mi 为第i层的格子数,当mi>=mi+1(i=1,2,,n-1) ,即上层的格子数不少于下层的格子数的图。

如下是一些ferrers图:



所以,可以看到,每个合理的摆放每一层都是一个ferrers图,且下层图的格子数不能比上层的格子数小,即每一列都不能小,然后至多堆放c层,这样,思路就有了

因为我不会写java,所以我先用c++实现打了个表,下面是我的C++代码实现;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值