基准时间限制: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;
}

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

最新文章

  1. Android Studio中获取查看签名SHA1证书指纹数据或MD5的方法
  2. JS的兼容函数
  3. 【web前端优化之图片模糊到清晰】看我QQ空间如何显示相片
  4. quick2.26 android下http崩溃
  5. python中*args和**args的不同
  6. Bootstrap_表单_图像
  7. js压缩解压工具
  8. 动态代理双剑客--JDK Proxy与CGLIB
  9. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰
  10. 总线接口与计算机通信(一)I2C总线
  11. PHP Switch 语句
  12. bzoj 3126 单调队列优化dp
  13. Django 的命令及简单例子
  14. ajax方式下载文件
  15. 使maven2在下载依赖包的同时下载其源代码包。
  16. 【十大算法实现之naive bayes】朴素贝叶斯算法之文本分类算法的理解与实现
  17. STM32.SPI(25Q16)
  18. C# 实现邮件代发
  19. Android Framebuffer介绍及使用【转】
  20. 逃生(反向topo)

热门文章

  1. eos 智能合约开发体验
  2. pt-archiver 归档数据
  3. SimpleAliasRegistry
  4. R 《回归分析与线性统计模型》page120,4.3
  5. [Codeforces #608 div2]1272B Blocks
  6. JSONPath 表达式的使用
  7. 使用线程池测试cpu的并发计算能力
  8. JS 选择电脑中的文件目录
  9. 吴裕雄--天生自然java开发常用类库学习笔记:IdentityHashMap类
  10. 读取多张MNIST图片与利用BaseEstimator基类创建分类器