51nod 1392 装盒子
第一行一个数N表示盒子的个数。
接下来N行,每行两个正整数,表示每个盒子的长度和宽度。
所有整数都是正的(N,以及盒子的长宽),且不超过200。
一行一个整数表示最终最小的占地面积。
对于相同大小的盒子可以相互嵌套而只保留一个,考虑最大费用最大流,每个盒子i拆成a[i],b[i]两点,若x可放入y,则连边a[x]->b[y],流量1,费用为x的面积,代表x放入y对答案的影响,源点到a[i]连边,流量1,费用0,使每个盒子最多只能放进一个盒子,a[i],b[i]到汇点连边,流量1,费用0,使每个盒子最多只能被放入一个盒子
#include<cstdio>
#include<queue>
#include<algorithm>
int n;
struct pos{
int a,b;
}ps[];
bool operator<(pos a,pos b){
return a.a!=b.a?a.a<b.a:a.b<b.b;
}
bool operator==(pos a,pos b){
return a.a==b.a&&a.b==b.b;
}
const int N=,inf=0x3f3f3f3f;
int es[N],enx[N],ev[N],ec[N],e0[N],ep=,S,T,ans=,l[N],in[N],pv[N],pe[N];
std::queue<int>q;
void adde(int a,int b,int f,int c){
es[ep]=b;enx[ep]=e0[a];ev[ep]=f;ec[ep]=c;e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];ev[ep]=;ec[ep]=-c;e0[b]=ep++;
}
bool sp(){
for(int i=;i<=T;++i)l[i]=-inf;
l[S]=;
q.push(S);
while(!q.empty()){
int w=q.front();q.pop();
in[w]=;
for(int i=e0[w];i;i=enx[i])if(ev[i]){
int u=es[i];
if(l[w]+ec[i]>l[u]){
l[u]=l[w]+ec[i];
pv[u]=w;
pe[u]=i;
if(!in[u])in[u]=,q.push(u);
}
}
}
return l[T]>;
}
void mcs(){
for(int w=T;w!=S;w=pv[w]){
int e=pe[w];
--ev[e];
++ev[e^];
}
ans-=l[T];
}
int cs[];
int main(){
scanf("%d",&n);
for(int i=;i<n;++i)scanf("%d%d",&ps[i].a,&ps[i].b);
std::sort(ps,ps+n);
n=std::unique(ps,ps+n)-ps;
S=n*+;T=S+;
for(int i=;i<n;++i){
ans+=ps[i].a*ps[i].b;
for(int j=;j<n;j++)if(i!=j&&ps[i].a<=ps[j].a&&ps[i].b<=ps[j].b){
adde(i+,n+j+,,ps[i].a*ps[i].b);
}
adde(S,i+,,);
adde(n+i+,T,,);
adde(i+,T,,);
}
while(sp())mcs();
printf("%d",ans);
return ;
}
51nod 1392 装盒子的更多相关文章
- 51nod 1392 装盒子(费用流)
如果权值为\(1\)就是最长反链. 然而并不是.考虑用费用流. 把每一个盒子\(i\)拆成i和\(i+n\). 设源点为\(S\),汇点为\(T\). \(S\)向每一个i连容量为\(1\),费用为\ ...
- 51nod 1392:装盒子 匈牙利+贪心
1392 装盒子 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子 ...
- 51nod 算法马拉松4 D装盒子(网络流 / 二分图最优匹配)
装盒子 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子只可以套入长和宽分别不小于它的盒子,并且 ...
- 视频学习_css基础学习
块状元素 block element 容器元素 设置高宽 width height 可以容纳 文本 内脸 和其他块状 霸道 独占一行 特例:form 只容纳 块状元素 常见元素 http:// ...
- 递归转手工栈处理的一般式[C语言]
是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...
- 抽象工厂模式详解 —— head first 设计模式
项目实例 假设你有一家 pizza 店,你有很多种 pizza,要在系统中显示你所有 pizza 种类.实现这个功能并不难,使用普通方式实现: public class PizzaStore { Pi ...
- 工厂模式之简单工厂模式,head first设计模式
简单设计模式比较简单,15分钟的时间,跟着我做,十几分钟学会简单设计模式,开始吧: 1.使用new实例化一个对象时,你肯定知道这种代码缺少弹性,绑定着具体的类会导致代码更加脆弱,简单工厂模式就是针对接 ...
- Codeforces Round #464 (Div. 2) B. Hamster Farm[盒子装仓鼠/余数]
B. Hamster Farm time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- css 大话盒子模型
什么是盒子模型? CSS中, Box Model叫盒子模型(或框模型),Box Model规定了元素框处理元素内容(element content).内边距(padding).边框(border) 和 ...
随机推荐
- GFF format
后记: ************************************************************************ 在使用cufflinks和cuffmerge中 ...
- Java自带的keytool命令
使用Java自带的keytool命令,在命令行生成. 1.生成服务器端私钥kserver.keystore文件 keytool -genkey -alias serverkey -validity 1 ...
- vmware-workstation-11中centos-6.6安装
排版比较乱,参见 https://www.zybuluo.com/Jpz/note/144303 VMware Workstation 11中CentOS 6.6安装 Linux开发环境配置 目录 V ...
- ZSDR017-客户订货价格和库存
*----------------------------------------------------------------------*ZSDR017-客户订货价格和库存*---------- ...
- 织梦DedeCMS"当前位置"去除最后一个 > 符号的方法
首先找到根目录下面的include 目录,然后找到 typelink.class.php 文件, 再查找到 GetPositionLink 方法 下面的 return $this->valueP ...
- JS数组随机排序
var arr=[1,2,3,4,5]; arr.sort(function(a,b){ var v=Math.random()>0.5?1:-1; console.log(a,b,v); re ...
- Java设计模式之简单工厂设计模式
简单工厂将业务逻辑部分和界面逻辑部分分离开来,降低了界面逻辑和业务逻辑的耦合度,符合面向对象迪米特法则.下面以一个加法减法运算器为例,各位读者可以自行按照这种设计方式设计出一个小小的运算器. 1.业务 ...
- bootstrap源码里的function加上了+号
一般看JQuery插件里的写法是这样的 (function($) { //... })(jQuery); 今天看到bootstrap的javascript组件是这样写的 !function( $ ){ ...
- powershell samples
1,导出至EXCEL $arr =New-Object System.Collections.ArrayList $i = 1 $pstablelist = @(); $array =get-user ...
- Notepad++ Emmet安装方法教程
Notepad++ Emmet安装后出现 unknown exception提示插件无效Python Script Plugin did not accept the script.以下为记录解决方法 ...