博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1528 二分匹配
阅读量:5298 次
发布时间:2019-06-14

本文共 1119 字,大约阅读时间需要 3 分钟。

#include<stdio.h>

#include<string.h>
int map[100][100],mark[100],link[100],max2,k;
int find(int u) {
 int i;
 for(i=1;i<=k;i++) {
  if(!mark[i]&&map[u][i]) {
   mark[i]=1;
   if(!link[i]||find(link[i])) {
    link[i]=u;
    return 1;
   }
  }
 }return 0;
}
int seach(char c) {
 if(c=='C')
  return 1;
 if(c=='D')
  return 2;
 if(c=='S')
  return 3;
 if(c=='H')
  return 4;
 if(c=='T')
  return 10;
 if(c=='J')
  return 11;
 if(c=='Q')
  return 12;
 if(c=='K')
  return 13;
 if(c=='A')
  return 14;
 if(c>='2'&&c<='9')
  return c-'0';
}
int main() {
 int i,j,sum,ans,ans2,t,a,b,diyi[100],dier[100];
 char c,ch;
 scanf("%d",&t);
 while(t--) {
  scanf("%d",&k);
  memset(map,0,sizeof(map));
  memset(link,0,sizeof(link));
  for(i=1;i<=k;i++) {
   scanf(" %c%c",&c,&ch);
   a=seach(c);
   b=seach(ch);
      diyi[i]=(a-1)*4+b;
  }
  for(i=1;i<=k;i++) {
    scanf(" %c%c",&c,&ch);
   a=seach(c);
   b=seach(ch);
      dier[i]=(a-1)*4+b;
  }
  sum=0;
  for(i=1;i<=k;i++)
   for(j=1;j<=k;j++)
    if(dier[i]>diyi[j])
     map[i][j]=1;//重要的地方不能写成map[dier[i]][diyi[j]]=1这样会超时巧妙地将其转化为k个数的比较
    for(i=1;i<=k;i++) {
     memset(mark,0,sizeof(mark));
     sum+=find(i);
    }
    printf("%d\n",sum);
    }
 return 0;
}
 

    

转载于:https://www.cnblogs.com/thefirstfeeling/p/4410972.html

你可能感兴趣的文章
C#更新程序设计
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
Extjs6 经典版 combo下拉框数据的使用及动态传参
查看>>
【NodeJS】http-server.cmd
查看>>
研磨JavaScript系列(五):奇妙的对象
查看>>
面试题2
查看>>
selenium+java iframe定位
查看>>
P2P综述
查看>>
第五章 如何使用Burp Target
查看>>
Sprint阶段测试评分总结
查看>>
sqlite3经常使用命令&amp;语法
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
随机颜色值
查看>>