#include<string.h>
#include<iostream>
#include<vector>
using namespace std;
struct size{
int w, l, h;
};
int cmps(size s1, size s2)
{
if (s1.w < s2.w&&s1.l < s2.l&&s1.h < s2.h)
return 1;
if (s1.w>s2.w&&s1.l > s2.l&&s1.h > s2.h)
return -1;
return 0;
}
bool used[600];
int con[600];
vector<int> edge[600];
vector<size> sizes;
bool find(int x)
{
for (int i = 0; i < edge[x].size(); i++)
{
if (!used[edge[x][i]])
{
used[edge[x][i]] = true;
if (con[edge[x][i]] == -1 || find(con[edge[x][i]]))
{
con[edge[x][i]] = x;
return true;
}
}
}
return false;
}
int match(int n)
{
memset(con, -1, sizeof(con));
int res = 0;
for (int i = 0; i < n; i++)
{
memset(used, false, sizeof(used));
if (find(i))
res++;
}
return res;
}
int main()
{
int n;
while (cin >> n&&n)
{
for (int i = 0; i < n;i++)
edge[i].clear();
sizes.clear();
for (int j = 0; j < n; j++)
{
size ts;
cin >> ts.w >> ts.l >> ts.h;
for (int i = 0; i < sizes.size(); i++)
{
int k = cmps(sizes[i], ts);
if (k == 1)
edge[i].push_back(j);
else if (k == -1)
edge[j].push_back(i);
}
sizes.push_back(ts);
}
cout << (n - match(n)) << endl;
}
return 0;
}
hdoj4160_Dolls(最小路径覆盖)
最新推荐文章于 2017-08-20 19:50:20 发布