比赛 |
20140421 |
评测结果 |
AAAAAAEAEA |
题目名称 |
导弹拦截 |
最终得分 |
80 |
用户昵称 |
GDFRWMY |
运行时间 |
0.183 s |
代码语言 |
C++ |
内存使用 |
5.20 MiB |
提交时间 |
2014-04-21 09:04:15 |
显示代码纯文本
#include<fstream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
ifstream fin("bomba.in");
ofstream fout("bomba.out");
class xxx{
public:
int x,y,z;
};
xxx k[10000];
int n,ans,flag[10000],f[10000],sum,vis[10000],fa[10000];
int map[1100][1100];
bool operator <(xxx a,xxx b){
return (a.x < b.x && a.y < b.y && a.z < b.z);
}
/*void dfs(int x){
for(int i=x+1;i<=n;i++)
if (flag[i]==0&&k[x]<k[i]){
flag[i]=1;
dfs(i);
return;
}
}
*/
bool dfs(int x){
for (int i=n;i<=n+n;i++){
if (map[x][i]&&vis[i]==0){
vis[i]=1;
if (fa[i]==0||dfs(fa[i])){
fa[i]=x;
return true;
}
}
}
return false;
}
bool cmp(xxx a,xxx b){
if (a.x < b.x) return 1;
if (a.x > b.x) return 0;
if (a.y < b.y) return 1;
if (a.y > b.y) return 0;
return a.z < b.z;
}
int main(){
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i].x>>k[i].y>>k[i].z;
sort(k+1,k+n+1,cmp);
f[1]=1;
for(int i=2;i<=n;i++){
f[i]=1;
for (int j=1;j<i;j++)
if (f[i]<f[j]+1&&k[j]<k[i])
f[i]=f[j]+1;
}
ans=0;
for(int i=1;i<=n;i++) if (ans<f[i]) ans=f[i];
fout<<ans<<endl;
ans=0;
/*for(int i=1;i<=n;i++)
if (flag[i]==0){
ans++;
flag[i]=1;
dfs(i);
}
fout<<ans;*/
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if (k[i]<k[j])
map[i][j+n]=map[i+n][j]=1;
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if (dfs(i)) sum++;
}
fout<<n-sum;
return 0;
}