hdu 1528 Card Game Cheater 最大匹配
2015-07-19 17:54
435 查看
原题链接:点击打开链接题意:已知 Adam’s 和 Eve’s 牌,通过改变EVe's牌的顺序,求EVe's有几张牌>Adam's的牌思路:想暴力模拟 ,无奈我是个没脑子的人,于是放弃了,转换成图论知识真是碉堡了!!!将给出的每张牌转换成相应的数字存储(简便很多),比较A和E的牌,E的牌比A的牌大时 将这两张牌连边 ;见代码code:
#include <iostream> #include <cstdio> #include <cstring> #include <map> using namespace std; const int maxx=60; int ma[maxx][maxx]; int link[maxx],vis[maxx]; map<char,int>m; void init()//按照合适的大小 将牌面值转换成数字; { m['H']=4; m['S']=3; m['D']=2; m['C']=1; m['1']=0; m['2']=4; m['3']=8; m['4']=12; m['5']=16; m['6']=20; m['7']=24; m['8']=28; m['9']=32; m['T']=36; m['J']=40; m['Q']=44; m['K']=48; m['A']=52; } int dfs(int s) { for(int i=1;i<=56;i++) { if(ma[s][i] && !vis[i]) { vis[i]=1; if(link[i]==-1 || dfs(link[i])) { link[i]=s; return 1; } } } return 0; } int hungary() { int i,ans=0; memset(link,-1,sizeof(link)); for(i=1;i<=56;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } return ans; } int main() { //freopen("i.txt","r",stdin); int i,t,j,k,s1[30],s2[30]; char s[3]; init(); scanf("%d",&t); while(t--){ memset(ma,0,sizeof(ma)); scanf("%d",&k); for(i=0;i<k;i++) { scanf("%s",s); int t1=m[s[0]]; int t2=m[s[1]]; s1[i]=(t1+t2);//s[1]保存的是A的牌 } for(i=0;i<k;i++) { scanf("%s",s); int t1=m[s[0]]; int t2=m[s[1]]; s2[i]=(t1+t2);//s[2]保存的是E牌 } for(i=0;i<k;i++) for(j=0;j<k;j++) if(s2[i]>s1[j])//如果E的牌>A的牌,连边; ma[s2[i]][s1[j]]=1; printf("%d\n",hungary());//匈牙利算法 求最大匹配; } return 0; }
相关文章推荐
- 屏蔽控制台应用程序窗口
- bootstrap 笔记01
- GCC 参数详解
- Linux环境下段错误的产生原因及调试方法小结
- IOS计算文字高度
- bootstrap模态框和select2合用时input无法获取焦点
- badboy+jMeter+jProfile软件测试工具介绍(一)
- 【thinkphp3.1.x】thinkphp3.1.x中有关redis缓存相关的文件
- 关于hibernate的一些恶心的小地方报错(持续更新)
- 系统重装后,Mysql数据库重装加载原来数据库
- Linux下的GitHub安装与简单配置教程
- Tachyon0.6.4+Spark1.3+hadoop2.6.0 配置教程详解
- 基于 OpenFlow 实现网络虚拟化
- 在Windows7上安装MySQL5.6后没有服务,无法启动的问题,报错10061
- piwik阅读(整体结构)
- 股票学习27
- 读取XML文件并生成DataTable
- spark1.4.0基于yarn的安装心得体会
- Python里面如何拷贝一个对象?
- xUtils解析