HDOJ 1528 Card Game Cheater(二分图最大匹配)
2016-03-05 12:04
337 查看
点击打开链接
题意:相当于是一个田忌赛马的问题,每个人按照顺序出牌,先比数字,如果数字一样,再比花色,赢的人可以加一分。现在知道对手的牌(数字和花色),问怎么安排自己的出牌顺序,使得自己赢得更多。
按照题目给出的顺序,依次枚举自己和对手的牌,如果自己的牌可以赢对手,那么就是一条通路。这就是一个求二分图最大匹配的问题。
题意:相当于是一个田忌赛马的问题,每个人按照顺序出牌,先比数字,如果数字一样,再比花色,赢的人可以加一分。现在知道对手的牌(数字和花色),问怎么安排自己的出牌顺序,使得自己赢得更多。
按照题目给出的顺序,依次枚举自己和对手的牌,如果自己的牌可以赢对手,那么就是一条通路。这就是一个求二分图最大匹配的问题。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> #include<string> #define N 100 using namespace std; int g , used , link ; string a , b ; int c1, d1, c2, d2, x, y, T, n, res; int makeInt(char s) { if (s >= '2' && s <= '9') x = s - '0'; if (s == 'T') x = 10; if (s == 'J') x = 11; if (s == 'Q') x = 12; if (s == 'K') x = 13; if (s == 'A') x = 14; return x; } int makeInt2(char s) { if (s == 'C') y = 1; if (s == 'D') y = 2; if (s == 'S') y = 3; if (s == 'H') y = 4; return y; } int dfs(int u) { for (int v = 1; v <= n; v++) if (g[u][v] && !used[v]) { used[v] = 1; if (link[v] == -1 || dfs(link[v])) { link[v] = u; return 1; } } return 0; } int main() { scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) cin >> a[i]; for (int j = 1; j <= n; j++) cin >> b[j]; memset(g, 0, sizeof(g)); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { c1 = makeInt(a[i][0]); d1 = makeInt2(a[i][1]); c2 = makeInt(b[j][0]); d2 = makeInt2(b[j][1]); if (c1 < c2 || c1 == c2 && d1 < d2) g[i][j] = 1; } memset(link, -1, sizeof(link)); res = 0; for (int i = 1; i <= n; i++) { memset(used, 0, sizeof(used)); if (dfs(i)) res++; } printf("%d\n", res); } return 0; }
相关文章推荐
- Pinyin Comparison 拼音辨别 V1.0
- 关于Javascript setTimeout中的this问题,以及倒计时器的实现源码
- Modulo and Reminder
- IE6下整站的bug详解
- rqnoj(PID737 / 火柴排队 match)
- centos配置虚拟主机多网站
- android小技巧之TextView设置不同字体大小及样式
- php 长整型转字符串 (convert long to string)
- 惊蛰来了,别把健康吓跑了
- PHP 批量移动文件改名
- 微信浏览器取消缓存的方法
- Android stdio导入项目后报图片问题(app:mergeDebugResources)
- 学习linux决心书
- Linux系统中tr命令的基本使用教程
- CI框架的一些笔记
- 32. Longest Valid Parentheses *HARD*
- postgresql数据库备份了一份.backup文件,如何用命令还原
- ubuntu firefox 运行flashCPU占用率大 安装flashblock 手动运行flash
- wordpress搜索伪静态【补充】
- Linux内核分析第二周总结