[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的 ...
随机推荐
- 使用Nominatim进行openstreetmap地址搜索/解析
Nominatim(来自拉丁语,意思是“名称”)是一个可以按名称和地址来搜索OSM中的数据,并生成OSM点的合成地址的工具(反向地理编码).可用在http://nominatim.openstreet ...
- OpenGL Common Mistakes
https://www.opengl.org/wiki/Common_Mistakes Do not use constructors/destructors to initialize/destro ...
- API接口:分页
// 查询满足要求的总记录数 $count = M("back")->where($back_map)->count(); $pagecount = ceil($cou ...
- mahout 安装测试
1 下载 在http://archive.apache.org/dist/mahout下载相应版本的mahout 版本,获取官网查看http://mahout.apache.org 相关的信息
- javascript数据结构与算法---栈
javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...
- tyvj1938 最优战舰
描述 太空战队顺利地完成了它的第一次使命,这一行动的受益者陆军本部当即决定,请陆军的战士们投票选出最优战舰并报司令总部进行表彰.为防止有人利用高科技手段造假,陆军本部决定使用最原始的方法进行投票.可不 ...
- 【bzoj3450】Tyvj1952 Easy
题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有 ...
- Git 简明教程
其他Git资料: Git Community Book 中文版
- git 简单使用
创建新分支:git branch branchName 切换到新分支:git checkout branchName 然后 ,上面两个命令也可以合成为一个命令: git checkout -b bra ...
- sdcms留言提交
引入这两个js <script src="{webroot}lib/validator/jquery.validator.js"></script>< ...