您的位置:首页 > 其它

HDU 4160 Dolls (二分图)

2016-04-22 16:11 281 查看
PS:类似于盒子问题,给定盒子的长宽高的大小,只不过多了一个高。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node{
int l,h,w;
}q[601];
int mp[601][601];

bool op(node a,node b){
return a.l*a.h<b.l*b.h;
}
int cro[601],n;
bool vis[601];

bool so(int x){
for(int i = n;i >=1;-- i){
if(mp[x][i]&&!vis[i]){
vis[i] = true;
if(cro[i] == -1||so(cro[i])){
cro[i] = x;
return true;
}
}
}
return false;
}

int main()
{
int m,i,j,k,ans;
while(~scanf("%d",&n)&&n){
memset(mp,0,sizeof(mp));
for(i = 1;i <= n;++ i){
scanf("%d%d%d",&q[i].l,&q[i].w,&q[i].h);
}

sort(q+1,q+1+n,op);

for(i = 1;i <= n;++i ){
for(j = i+1 ;j <= n;++ j){
if(q[j].l > q[i].l&&q[j].h > q[i].h&&q[j].w> q[i].w)
mp[i][j]=1;
}
}
ans = n;
memset(cro,-1,sizeof(cro));
for(i = n;i >=1;-- i){
memset(vis,false,sizeof(vis));
if(so(i))
ans--;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分图