Leo 搭积木
Leo 搭积木
【问题描述】
Leo是一个快乐的火星人,总是能和地球上的 OIers玩得很 high。
2012 到了, Leo 又被召回火星了,在火星上没人陪他玩了,但是
他有好多好多积木,于是他开始搭积木玩。
火星人能制造 n 种积木,积木能无限供应。每种积木都是长方体,
第 i 种积木的长、宽、高分别为 li、 wi、 hi。积木可以旋转,使得
长宽高任意变换。 Leo 想要用这些积木搭一个最高的塔。问题是,如
果要把一个积木放在另一个积木上面,必须保证上面积木的长和宽都
严格小于下面积木的长和宽。这意味着,即使两块长宽相同的积木也
不能堆起来。
火星上没有电脑,好心的你决定帮助 Leo 求出最高的塔的高度。
【输入说明】
第一行,一个整数 n,表示积木的种数
接下来 n 行,每行 3 个整数 li, wi, hi,表示积木的长宽高
【输出说明】
一行一个整数,表示塔高的最大值
【提示】
每种积木都可以拆分成高度分别为 li、 wi、 hi 的三种积木,另
两边作为长和宽,保证长>=宽。
输入
1
10 20 30
输出
40
输入
2
6 8 10
5 5 5
输出
21
输入
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
输出
342
对于此题,将所有可能的积木全部存储起来,然后以长为第一关键字,宽为第二关键字排序(从大到小),再dp一道就行了.
我有两组超时,如果有人能有更好的算法可以跟我说.
#include <algorithm>
#include <iostream>
#include <cstring>
#include <fstream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std; ifstream fin("brick.in");
ofstream fout("brick.out"); int cnt_block=;
struct id{
int chang;
int kuan;
int gao;
};
id block[]={};
int jiyi[][]; bool qqsort(id a,id b);
int dp(int now,int pan); bool qqsort(id a,id b){
//if(a.chang>b.chang&&a.kuan>b.kuan)return 1;
if(a.chang>b.chang)return ;
if(a.chang==b.chang&&a.kuan>b.kuan)return ;
return ;
} int dp(int now,int pan){
if(now>cnt_block*)return ;
if(jiyi[now][pan]!=-)return jiyi[now][pan];
int yao=,unyao=;
if((block[now].chang<block[pan].chang&&block[now].kuan<block[pan].kuan)||pan==)
yao=block[now].gao+dp(now+,now);
unyao=dp(now+,pan);
if(yao>unyao)unyao=yao;
jiyi[now][pan]=unyao;
return unyao; } int main(int argc, char** argv) {
fin>>cnt_block;
int cnt_blocks=;
for(int x=;x<=cnt_block;x++){
int a,b,c;
fin>>a>>b>>c;
block[++cnt_blocks].chang=max(a,b);
block[cnt_blocks].kuan=min(a,b);
block[cnt_blocks].gao=c;
block[++cnt_blocks].chang=max(a,c);
block[cnt_blocks].kuan=min(a,c);
block[cnt_blocks].gao=b;
block[++cnt_blocks].chang=max(b,c);
block[cnt_blocks].kuan=min(b,c);
block[cnt_blocks].gao=a;
}
sort(block+,block++cnt_blocks,qqsort);
//for(int x=1;x<=cnt_blocks;x++){
// cout<<block[x].chang<<" "<<block[x].kuan<<" "<<block[x].gao<<endl;
//}
memset(jiyi,-,sizeof(jiyi));
int ans=dp(,);
cout<<ans;
fout<<ans;
return ;
}
Leo 搭积木的更多相关文章
- Android_就像小朋友“搭积木”一样。
就像小朋友“搭积木”一样.感觉这句话很有意思.完整的话是这样的: Android提供了大量功能丰富的UI组件,开发者只要按一定规律把这些UI组件组合起来 --就像小朋友“搭积木”一样,把这些UI组件搭 ...
- XJOI1657&Codevs1255搭积木【树状动规】
搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行 ...
- 蓝桥杯-搭积木-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- codevs 3249 搭积木
提交地址:http://codevs.cn/problem/3249/ 3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目 ...
- [Luogu 2816]宋荣子搭积木
Description saruka非常喜欢搭积木,他一共有n块积木.而且saruka的积木很特殊,只能一块块的竖着摞,可以摞很多列.说过saruka的是特殊的积木了,这些积木都非常智能,第i块积木有 ...
- 搭积木(block)
[问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一 ...
- 搭积木(java)-蓝桥杯
搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9.搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小.最后搭成4层的金字塔形,必须用完所有的积木.下 ...
- 《陪孩子像搭积木一样学编程》,一起来玩Scratch(1)使用Scratch编程的基本流程
编程是一件很有趣的事情.初次接触编程,你可能不知所措,别担心,这并不复杂.首先,为了让读者对编程有大概的了解,可以把编写Scratch程序的过程分成7个步骤(如图1.8).注意,这是理想状态.在实际的 ...
- 整数N分解,搭积木,离散数学中的母函数,ZOJ(1163)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1163 解题报告: 将整数N分解为:两个及以上的不重复的整数,最流 ...
随机推荐
- C语言基础程序设计
1 概论 程序(指令和数据的集合)在运行时,首先会被加载到内存(此时称为进程),然后由CPU通过控制器的译码从内存中读取指令,并按照指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再 ...
- C++ 虚函数与纯虚函数
#include<iostream> #include<string> using namespace std; class A{ public: virtual void f ...
- 《Velocity java开发指南》中文版(上)转载
文章引自:http://sakyone.iteye.com/blog/524289 1.开始入门 Velocity是一基于java语言的模板引擎,使用这个简单.功能强大的开发工具,可以很容易的将数据对 ...
- 配置并学习微信JS-SDK(2)—图片接口
测试地址:http://www.qq210.com/shoutu/android 检查图像接口 选择本地或拍照的图片 上传选择的图片 预览上传的图片 //1.检查图像接口 document.query ...
- execute、executeUpdate、executeQuery三者的区别及返回值
一.boolean execute(String sql)允许执行查询语句.更新语句.DDL语句.返回值为true时,表示执行的是查询语句,可以通过getResultSet方法获取结果:返回值为fal ...
- 【python之旅】python简介和入门
python简介: 一.什么是python python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了打发时间,决心开发一个新的脚本解释程序, ...
- 使用pyinstaller 2.1将python打包并添加版本信息和图标
最近用 wxpython写了一个小的脚本,因为想要发布给没有装python和wxpython的人使用,遂决定使用pyinstaller 2.1进行打包. 其中遇到几个问题: 1,给打包的文件添加图标 ...
- SpringMVC源码阅读(三)
先理一下Bean的初始化路线 org.springframework.beans.factory.support.AbstractBeanDefinitionReader public int loa ...
- Java serialVersionUID
1.为什么要使用serialVersionUID (1)对于实现了Serializable接口的类,可以将其序列化输出至磁盘文件中,同时会将其serialVersionUID输出到文件中. (2)然后 ...
- node案例
http://www.cnblogs.com/wewe/archive/2010/03/19/1685658.html http://www.laonan.net/blog/69/ http://cn ...