[USACO] 铺放矩形块 题解
题目大意:
给定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] 铺放矩形块 题解的更多相关文章
- 【USACO 1.4.1】铺放矩形块
[描述] 给定4个矩形块,找出一个最小的封闭矩形将这4个矩形块放入,但不得相互重叠.所谓最小矩形指该矩形面积最小. 所有4个矩形块的边都与封闭矩形的边相平行,图1示出了铺放 ...
- HTML中为何p标签内不可包含div标签?那哪些块元素里面不能放哪些块元素呢?
先看下面的例子你就能明白两者的差别: <p>测试一下块元素与<span>内联元素</span>的差别</p> <p>测试一下<div& ...
- [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)
Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...
- HDU_2046——骨牌铺放问题,递推
Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: In ...
- ALGO-11_蓝桥杯_算法训练_瓷砖铺放(递归)
问题描述 有一长度为N(<=N<=)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一共有如下5 ...
- C语言 · 瓷砖铺放
算法训练 瓷砖铺放 时间限制:1.0s 内存限制:512.0MB 锦囊1 递归或递推. 问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长 ...
- 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 ...
- 算法训练 瓷砖铺放 【递归】java
算法训练 瓷砖铺放 时间限制:1.0s 内存限制:512.0MB 锦囊1 锦囊2 锦囊3 问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为 ...
- Java实现 蓝桥杯VIP 算法训练 瓷砖铺放
[题目描述]: 有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的 ...
随机推荐
- Pjax调用
$.pjax({container:'#content_center',url:href,data:data}); $(document).on('pjax:send', function() {// ...
- CSS3实现加载中效果
代码: <!doctype html> <html> <head> <meta charset="utf-8" /> <tit ...
- Shell case esac语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- PG 函数的易变性(Function Volatility Categories)
此概念的接触是在做分区表的时候碰到的,分区表按时间字段分区,在查询时当where条件中时间为now()或者current_time()等时是无法查询的,即使进行格式转换也不行,只有是时间格式如‘201 ...
- CSS gradient渐变之webkit核心浏览器下的使用
一.关于渐变 渐变是一种应用于平面的视觉效果,可以从一种颜色逐渐地转变成另外一种颜色,故可以创建类似于彩虹的效果渐变可以应用在任何可以使用图片的地方.例如,您可以指定一个这么一个渐变:顶部的颜色是红色 ...
- 《征服 C 指针》摘录6:解读 C 的声明
一.混乱的声明——如何自然地理解 C 的声明? 通常,C 的声明 int hoge; 这样,使用“类型 变量名;”的形式进行书写. 可是,像“指向 int 的指针”类型的变量,却要像下面这样进行声明: ...
- window共享linux下的文件 samba
1.在Ubuntu上安装samba服务 sudo apt-get install samba 2.修改配置文件vim /etc/samba/smb.conf [xubu] (共享名) guest ac ...
- MySQL 5.6 for Windows 解压缩版配置安装
MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C:\P ...
- ServletConfig 可以做啥
1.获得 servlet配置的servletname 2.获得servlet 配置的 getInitParameter("keyname") 3.获得servlet配置的 所有的 ...
- linux下ssh的几种验证方式
ssh的认证方式有很多种,大概可以概括为以下几类: 1.pam认证方式 在配置文件/etc/ssh/sshd_config中对应参数:UsePAM 2.密钥认证方式 配置文件/etc/ssh/sshd ...