基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题
 收藏
 关注
有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放。注意一个盒子只可以套入长和宽分别不小于它的盒子,并且一个盒子里最多只能直接装入另外一个盒子 (但是可以不断嵌套),例如1 * 1 可以套入2 * 1,而2 * 1再套入2 * 2。套入之后盒子占地面积是最外面盒子的占地面积。给定N个盒子大小,求最终最小的总占地面积。
Input
第一行一个数N表示盒子的个数。
接下来N行,每行两个正整数,表示每个盒子的长度和宽度。
所有整数都是正的(N,以及盒子的长宽),且不超过200。
Output
一行一个整数表示最终最小的占地面积。
Input示例
3
1 1
1 2
2 1
Output示例
4

将能够装进的两个盒子连一条边,然后按照面积大小对盒子排序进行二分图的最大匹配,匹配成功了就将总的面积-装进的盒子的面积。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int grid[805][805];
int link[805];
int visit[805];
int n, sum2, V1, V2; struct no { int x;
int y;
}node[205]; bool cmp(const no&node1,const no&node2)
{
return node1.x*node1.y < node2.x*node2.y;
} bool dfs(int x)
{
int i;
for (i = V2; i>=1; i--)
{
if (grid[x][i] && visit[i] == 0)
{
visit[i] = 1;
if (link[i] == -1 || dfs(link[i]))
{
link[i] = x;
return true;
}
}
}
return false;
} void Magyarors()
{
int i; memset(link, -1, sizeof(link));//!!这里不能是0 for (i = V1; i>=1; i--)
{
memset(visit, 0, sizeof(visit));
if (dfs(i))
{
sum2 = sum2 - node[i].x*node[i].y;
}
}
cout << sum2 << endl; } int main()
{
//freopen("i.txt","r",stdin);
// freopen("o.txt","w",stdout); int i,j,sum=0;
scanf("%d",&n); V1 = V2 = n;
for (i = 1; i <= n; i++)
{
scanf("%d%d",&node[i].x,&node[i].y);
sum2 += node[i].x*node[i].y;
}
sort(node + 1, node + n + 1, cmp);
for (i = 1; i <= n; i++)
{
for (j = i+1; j <= n; j++)
{
if (node[j].x >= node[i].x&&node[j].y >= node[i].y)
{
grid[i][j] = 1;
}
}
}
Magyarors();
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

51nod 1392:装盒子 匈牙利+贪心的更多相关文章

  1. 51nod 1392 装盒子(费用流)

    如果权值为\(1\)就是最长反链. 然而并不是.考虑用费用流. 把每一个盒子\(i\)拆成i和\(i+n\). 设源点为\(S\),汇点为\(T\). \(S\)向每一个i连容量为\(1\),费用为\ ...

  2. 51nod 1392 装盒子

    有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子只可以套入长和宽分别不小于它的盒子,并且一个盒子里最多只能直接装入另外一个盒子 (但是可以不断嵌套),例如1 * 1 可 ...

  3. 51nod 算法马拉松4 D装盒子(网络流 / 二分图最优匹配)

    装盒子   基准时间限制:1 秒 空间限制:131072 KB 分值: 160 有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子只可以套入长和宽分别不小于它的盒子,并且 ...

  4. 51nod 1163 最高的奖励(贪心+优先队列)

    题目链接:51nod 1163 最高的奖励 看着这题我立马就想到昨天也做了一道贪心加优先队列的题了奥. 按任务最晚结束时间从小到大排序,依次选择任务,如果该任务最晚结束时间比当前时间点晚,则将该任务的 ...

  5. 51nod 1117 聪明的木匠 (贪心)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1117 跟挑战程序书上例题一样,将要切割的n断木板,分别对应二叉树树的叶子 ...

  6. 51Nod 1091 线段的重叠(贪心+区间相关,板子题)

    1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...

  7. 51nod 1672 区间交(贪心)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672 题意: 思路:其实这就是一个经典的区间贪心问题,只需要按照左端点排 ...

  8. 51nod 1351 吃点心(贪心)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1351 题意: 思路: 要么先选low值大的,要么先选high值大的,分两 ...

  9. 【51Nod】1519 拆方块 贪心+递推

    [题目]1519 拆方块 [题意]给定n个正整数,\(A_i\)表示第i堆叠了\(A_i\)个石子.每轮操作将至少有一面裸露的石子消除,问几轮所有石子均被消除.\(n \leq 10^5\). [算法 ...

随机推荐

  1. CentOS configuration uses the SFTP server

    SFTP,即 SSH 文件传输协议( SSH File Transfer Protocol ),或者说是安全文件传输协议( Secure File Transfer Protocol ).SFTP 是 ...

  2. windows下安装多台mysql数据库且实现主从复制

    版本如下: windows server 2012 R2 mysql server 5.7.25安装版 / mysql server 5.7.25 解压版 * 这里为啥还要有安装版和解压版勒,主要是因 ...

  3. XV6源代码阅读-同步机制

    Exercise1 源代码阅读 锁部分:spinlock.h/spinlock.c以及相关其他文件代码 // Mutual exclusion lock. struct spinlock { uint ...

  4. 19 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.   思路:一个栈存普通元素,一个最小栈存放目前位置最小的元素,只在压入的时候判断是否为空以及最小元素,其他情况正常处理 ...

  5. Python连载61-tkinter三种布局

    一.pack布局举例 #pack布局案例 import tkinter baseFrame = tkinter.Tk() #以下代码都是创建一个组件,然后布局 btn1 = tkinter.Butto ...

  6. 025、Java中字符串连接与加法操作一起出现

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  7. 019.CI4框架CodeIgniter辅助函数类之:Array数组查询

    01. 数组辅助函数,可以方便的查看数组内部的成员,用法如下图所示: <?php namespace App\Controllers; class Hello extends BaseContr ...

  8. 从0开始自己配置一个vps虚拟服务器(2)

    配置php环境 1.安装php安装所依赖的包 yum -y install gcc gcc-c++ libxml2 libxml2-devel 2.cd usr/local/src 进入目录,在这个目 ...

  9. P1083 是否存在相等的差

    P1083 是否存在相等的差 转跳点:

  10. BZOJ 2744

    #include<iostream> #include<cstdio> #include<cstring> #include<vector> #incl ...