题目大意:

  给定4个矩形块,找出一个最小的封闭矩形将这4个矩形块放入,但不得相互重叠。所谓最小矩形指该矩形面积最小。

思路:

  枚举矩形的安放顺序,再按照题目所给的图判断即可,主要要想到枚举。

代码:

 #include<bits/stdc++.h>
using namespace std;
int i,n,sum=,p[],q[],a[],b[];
struct data { int x,y; }ans[];
bool used[]; bool cmp(data a,data b) { return a.x<b.x; } void pd(int l,int r)
{
if (l*r<sum)
{
sum=l*r,ans[n=].x=l,ans[].y=r;
if (l>r) swap(ans[].x,ans[].y);
return;
}
if (l*r==sum)
{
ans[++n].x=l,ans[n].y=r;
if (l>r) swap(ans[n].x,ans[n].y);
}
} void dfs(int k)
{
if (k>)
{
int l=,r=,i;
for (i=;i<;i++) l=max(l,p[i]),r+=q[i];
pd(l,r);//
for (l=r=,i=;i<;i++) l=max(l,p[i]),r+=q[i];
pd(l+p[],max(r,q[]));//
l=max(p[],p[])+p[],r=max(q[]+q[],q[]);
pd(max(l,p[]),r+q[]);//
l=max(p[],p[]),r=max(q[],q[]);
pd(l+p[]+p[],max(r,q[]+q[]));//
l=max(p[]+p[],p[]+p[]);
if (q[]>=q[])
if (q[]>q[]) pd(l,q[]+q[]);
else
if (p[]+p[]<=l) pd(l,max(q[]+q[],q[]+q[]));//
return;
}
for (int i=;i<;i++)
if (!used[i])
{
used[i]=;
p[k]=a[i],q[k]=b[i],dfs(k+);
p[k]=b[i],q[k]=a[i],dfs(k+);
used[i]=;
}
} int main()
{
for (i=;i<;i++) scanf("%d%d",&a[i],&b[i]);
dfs(),sort(ans+,ans+n+,cmp),printf("%d\n",sum);
printf("%d %d\n",ans[].x,ans[].y);
for (i=;i<=n;i++)
if (ans[i].x!=ans[i-].x) printf("%d %d\n",ans[i].x,ans[i].y);
return ;
}

[USACO] 铺放矩形块 题解的更多相关文章

  1. 【USACO 1.4.1】铺放矩形块

    [描述] 给定4个矩形块,找出一个最小的封闭矩形将这4个矩形块放入,但不得相互重叠.所谓最小矩形指该矩形面积最小.               所有4个矩形块的边都与封闭矩形的边相平行,图1示出了铺放 ...

  2. HTML中为何p标签内不可包含div标签?那哪些块元素里面不能放哪些块元素呢?

    先看下面的例子你就能明白两者的差别: <p>测试一下块元素与<span>内联元素</span>的差别</p> <p>测试一下<div& ...

  3. [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

  4. HDU_2046——骨牌铺放问题,递推

    Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:   In ...

  5. ALGO-11_蓝桥杯_算法训练_瓷砖铺放(递归)

    问题描述 有一长度为N(<=N<=)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一共有如下5 ...

  6. C语言 · 瓷砖铺放

    算法训练 瓷砖铺放   时间限制:1.0s   内存限制:512.0MB        锦囊1 递归或递推.   问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长 ...

  7. Educational Codeforces Round 35 B. Two Cakes【枚举/给盘子个数,两份蛋糕块数,最少需要在每个盘子放几块蛋糕保证所有蛋糕块都装下】

    B. Two Cakes time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  8. 算法训练 瓷砖铺放 【递归】java

      算法训练 瓷砖铺放   时间限制:1.0s   内存限制:512.0MB     锦囊1 锦囊2 锦囊3 问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为 ...

  9. Java实现 蓝桥杯VIP 算法训练 瓷砖铺放

    [题目描述]: 有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的 ...

随机推荐

  1. AFNetworking certificate AFNetworking 证书设置

    + (AFSecurityPolicy*)customSecurityPolicy { // /先导入证书 NSString *cerPath = [[NSBundle mainBundle] pat ...

  2. apk 破解

    Apk破解工具:AndroidCrackTool for Mac http://www.52pojie.cn/thread-452617-1-1.html 如何防止Unity3D代码被反编译 http ...

  3. QT C1041错误

    使用QT Createor + MSVC2013写程序时.我复制了一份之前OK的代码到新的工程中,工程名字和之前的工程一样,出现了奇怪的错误.开始程序总是崩溃,后来我删掉shadow build目录, ...

  4. (二)SQL Server分区创建过程

    虽然分区有很多好处(一)SQL Server分区详解Partition,却不能随意使用:且不说分区管理的繁琐,只是跨分区带来的负面影响就需要我们好好分析是否有必要使用分区.一般分区创建的业务特点:用于 ...

  5. [Python] 利用Django进行Web开发系列(二)

    1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...

  6. 【转】搞不清FastCgi与php-fpm之间是个什么样的关系?

    我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php-f ...

  7. 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件

    GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容, ...

  8. ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction

    如题:ThinkPHP v3.2.3 数据库读写分离,开启事务时报错: ERR: There is no active transaction 刚开始以为是数据表引擎不对造成的,因为 有几张表的引擎是 ...

  9. shell--3.运算符

    1.注意 原生bash不支持简单的数学运算,但是可以用其它命令来实现如 awk 和expr ,expr最常用 val=`expr 2 + 3` echo "结果 ${val}" # ...

  10. HDU 4946 Area of Mushroom(构造凸包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4946 题目大意:在一个平面上有n个点p1,p2,p3,p4....pn,每个点可以以v的速度在平面上移 ...