题目分析:将当前层定义为第h层,共用了n块积木,本层积木数为m,f(h,n,m)

那么可以扩展数两种状态:f(h-1,n-m,m-1),f(h-1,n-m,m+1)

直接搜索可能的数据达到h^m,超时超空间。

通过记录中间状态减少重复计算,同时剪枝:所有n个积木搭h层,每层积木平均数1<x<10, 超过这个范围就不可能了。

搜索的边界条件也要考虑到。F(1,i,i)=1.

动态规划的方程也可以写出来:f(h,n,m)=f(h-1,n-m,m-1)+f(h-1,n-m,m+1)

递归找方案:查找第k个方案的时候,根据节点左右关系,比左节点小向左找,否则向右找

注意向右找时k要减掉左侧的方案数

代码:

#include<iostream>
using namespace std; int N,H,M;
long long k;
long long f[][][];
bool vis[][][]; long long dfs(int h,int n,int m){
if(m>||m<)return ;
if(n/h>||n/h<)return f[h][n][m]=;//剪枝
if(vis[h][n][m])return f[h][n][m];
if(h==){
vis[h][n][m]=true;
if(m==n)return f[h][n][m]=;
else return f[h][n][m]=;
} f[h][n][m]=;
if(n-m>){
f[h][n][m]+=dfs(h-,n-m,m+);
f[h][n][m]+=dfs(h-,n-m,m-);
}
vis[h][n][m]=true;
return f[h][n][m];
} void find(long long x,int h,int n,int m){
cout<<m<<' ';
if(h>=){
if(x<=f[h-][n-m][m-])find(x,h-,n-m,m-);
else find(x-f[h-][n-m][m-],h-,n-m,m+);
}
} int main(){
cin>>N>>H>>M;
cout<<dfs(H,N,M)<<endl;
while(){
cin>>k;
if(k<)break;
else find(k,H,N,M);
cout<<endl;
}
return ;
}

测试点#0.in 结果:AC 内存使用量: 1128kB 时间使用量: 0ms 
测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms 
测试点#2.in 结果:AC 内存使用量: 364kB 时间使用量: 1ms 
测试点#3.in 结果:AC 内存使用量: 492kB 时间使用量: 0ms 
测试点#4.in 结果:AC 内存使用量: 360kB 时间使用量: 0ms 
测试点#5.in 结果:AC 内存使用量: 364kB 时间使用量: 0ms 
测试点#6.in 结果:AC 内存使用量: 488kB 时间使用量: 0ms 
测试点#7.in 结果:AC 内存使用量: 1004kB 时间使用量: 0ms 
测试点#8.in 结果:AC 内存使用量: 492kB 时间使用量: 0ms 
测试点#9.in 结果:AC 内存使用量: 748kB 时间使用量: 0ms

code1225 搭积木的更多相关文章

  1. Android_就像小朋友“搭积木”一样。

    就像小朋友“搭积木”一样.感觉这句话很有意思.完整的话是这样的: Android提供了大量功能丰富的UI组件,开发者只要按一定规律把这些UI组件组合起来 --就像小朋友“搭积木”一样,把这些UI组件搭 ...

  2. Leo 搭积木

    Leo 搭积木[问题描述]Leo是一个快乐的火星人,总是能和地球上的 OIers玩得很 high.2012 到了, Leo 又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木 ...

  3. XJOI1657&Codevs1255搭积木【树状动规】

    搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行 ...

  4. 蓝桥杯-搭积木-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  5. codevs 3249 搭积木

    提交地址:http://codevs.cn/problem/3249/ 3249 搭积木  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目 ...

  6. [Luogu 2816]宋荣子搭积木

    Description saruka非常喜欢搭积木,他一共有n块积木.而且saruka的积木很特殊,只能一块块的竖着摞,可以摞很多列.说过saruka的是特殊的积木了,这些积木都非常智能,第i块积木有 ...

  7. 搭积木(block)

    [问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一 ...

  8. 搭积木(java)-蓝桥杯

    搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9.搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小.最后搭成4层的金字塔形,必须用完所有的积木.下 ...

  9. 《陪孩子像搭积木一样学编程》,一起来玩Scratch(1)使用Scratch编程的基本流程

    编程是一件很有趣的事情.初次接触编程,你可能不知所措,别担心,这并不复杂.首先,为了让读者对编程有大概的了解,可以把编写Scratch程序的过程分成7个步骤(如图1.8).注意,这是理想状态.在实际的 ...

随机推荐

  1. json.loads(s) returns error message like this: ValueError: Invalid control character at: line 1 column 33 (char 33)

    json.loads(s) returns error message like this: ValueError: Invalid control character at: line 1 colu ...

  2. Cousera 无法播放视频 解决办法 widows 和 linux

    查资料得知,Cousera无法播放课程视频原因在于DNS污染. 尽管通过FQ软件把视频看完了,在最后一课找到了这个解决办法,现在拿出来分享给大家: Windows: 请参照以下链接: http://j ...

  3. HBase之八--(2):HBase二级索引之Phoenix

    1. 介绍 Phoenix 是 Salesforce.com 开源的一个 Java 中间件,可以让开发者在Apache HBase 上执行 SQL 查询.Phoenix完全使用Java编写,代码位于 ...

  4. [Java][Web]Web 工程中的各类地址的写法

    // 1. request.getRequestDispatcher("/index.html").forward(request,response); // 以 / 开头,对于浏 ...

  5. oracle 索引使用小结

    1. 普通索引 create index my_index on test (col_1); 可创建合并两列或多列的索引,最多可将32列合并在一个索引中(位图索引最多可合并30列) create in ...

  6. 解决Vmware workstation上不能安装Hyper-V的问题

    从今天开始,博主正式开始学习微软相关的知识了.众所周知,微软的虚拟化技术Hyper-V现在也很火.可是博主也没有一台服务器来装Hyper-V.于是想到在自己的PC上先装一个Vmware worksta ...

  7. thinkphp5的程序部署到虚拟主机的配置

    thinkphp5的程序部署到虚拟主机的配置 建议不要,因为这些目录文件会全部保留,那么没办法的时候咋整 1 htdocs 虚拟主机上的   把public/index.php修改 改动后的放到 ht ...

  8. maven中的pom配置文件标签的详细介绍

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  9. Django中多种重定向方法使用

    本文主要讲解使用HttpResponseRedirect.redirect.reverse以及配置文件中配置URL等重定向方法 本文使用了Django1.8.2 使用场景,例如在表单一中提交数据后,需 ...

  10. Docker remote api 开启

    https://www.cnblogs.com/520playboy/p/7921633.html ExecStart=/usr/bin/dockerd-current -H unix:///var/ ...