zoukankan      html  css  js  c++  java
  • hdu 1528 二分匹配

    #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 ",sum);
        }
     return 0;
    }
     

        

  • 相关阅读:
    vue视图刷新失效
    vue移动端框架搭建
    猜单词--莫妮卡的新游戏
    快速上手python的坑
    江西育华学校初三下月考英语试卷 2020.3
    Title
    什么是vuex? 什么场景下适用vuex?
    左右模块滑动
    vue-router的几种实例方法以及参数传递
    完整的 vue-router 导航解析流程
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410972.html
Copyright © 2011-2022 走看看