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 搭积木的更多相关文章

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

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

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

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

  3. 蓝桥杯-搭积木-java

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

  4. codevs 3249 搭积木

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

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

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

  6. 搭积木(block)

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

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

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

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

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

  9. 整数N分解,搭积木,离散数学中的母函数,ZOJ(1163)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1163 解题报告: 将整数N分解为:两个及以上的不重复的整数,最流 ...

随机推荐

  1. Windows phone 之Image控件

    wp目前支持的图片格式为png和jpeg ,我们可以通过设置Source属性设置图片源. 还有两个属性是:Stretch,Opacity Stretch属性 image的拉伸行为有此属性决定,此属性是 ...

  2. bootstrap中的动态加载出来的图片轮播中的li标签中的class="active"的动态添加移除

    //该方法是在slide改变时立即触发该事件, $('#myCarousel').on('slide.bs.carousel', function () { $("#myCarousel o ...

  3. SurfaceFlinger服务概述和学习计划

    SurfaceFlinger服务负责绘制Android应用程序的UI 实现相当复杂,要从正面分析它的实现不是一件容易的事.既然不能从正面分析,我们就想办法从侧面分析.说到底,无论SurfaceFlin ...

  4. PHPCMS标签:get标签

    GET标签源自于PHPCMS 2008版,其使用SQL语句直接获取数据的特性,成为大家制作模板的首选. 在V9中这样强大的工具也得到保留下来. GET标签使用方式如下: {pc:get sql=&qu ...

  5. DataTable一些操作

    DataTable ReturnDt = new DataTable("Tab_Result"); ReturnDt.Columns.AddRange(new DataColumn ...

  6. codeforces 361 C - Mike and Chocolate Thieves

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Description Bad ...

  7. info.plist 属性讲解

    1 常用项: Application requires iPhone environment:如果应用程序不能在ipodtouch上运行,设置此项为true; Application usesWi-F ...

  8. 过滤器(Filter)

    day21 过滤器概述 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个 ...

  9. For Aisha(阿伊莎)

    相见时难别亦难,东风无力百花残.by:昂思多,20160524 跟你在一起,没有拘束感,完全就像是在跟亲人对话. 很喜欢这种感觉 虽然才认识不到10天,却就像是认识了好几年的老朋友 真的喜欢叫你“阿伊 ...

  10. eclipse的使用、优化配置

    一.简介 eclipse 可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为 什么使用它?我想离不开下面的 ...