Controlled Tournament(状态压缩DP)
Controlled Tournament
题意
n 名选手进行淘汰赛,R[i][j] = 1 表示 i 能胜过 j。要求通过安排淘汰赛使得,m 选手获得最终胜利,问使得比赛数最少的方案数。
分析
设 f(i, h, S) 表示 i 选手获胜 比赛 h 场 参赛选手集合为 S 的比赛方案有多少种。
那么状态转移就是 \(f(i, h, S) = \sum{f(i, h - 1, S') * f(j, h - 1, S - S')}\),满足 i 能胜过 j,\(i \in S'\),\(j \in {S - S'}\)。
code
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1 << 16;
int n, m;
int bit1[MAXN]; // 二进制数中有多少个 1
int dp[20][10][MAXN];
vector<int> G[20];
int dfs(int u, int h, int bits) {
if(bit1[bits] == 1) return 1;
if((1 << h) < bit1[bits]) return 0;
if(dp[u][h][bits] != -1) return dp[u][h][bits];
else dp[u][h][bits] = 0;
int& res = dp[u][h][bits];
for(int i = bits & (bits - 1); i; i = bits & (i - 1)) { // 枚举 bits 里的 1 选或不选的情况
if((i >> u) & 1) {
int j = bits ^ i;
for(int k = 0; k < G[u].size(); k++) {
int v = G[u][k];
if((j >> v) & 1) {
res += dfs(u, h - 1, i) * dfs(v, h - 1, j);
}
}
}
}
return res;
}
int main() {
for(int i = 0; i < MAXN; i++) {
bit1[i] = bit1[i >> 1] + (i & 1);
}
while(cin >> n >> m && (n + m)) {
memset(dp, -1, sizeof dp);
for(int i = 0; i < n; i++) G[i].clear();
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
int x;
cin >> x;
if(x) G[i].push_back(j);
}
}
int h = ceil(log(n) / log(2));
cout << dfs(m - 1, h, (1 << n) - 1) << endl;
}
return 0;
}
Controlled Tournament(状态压缩DP)的更多相关文章
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- 状态压缩dp问题
问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...
- BZOJ-1226 学校食堂Dining 状态压缩DP
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
- HDU 4511 (AC自动机+状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4511 题目大意:从1走到N,中间可以选择性经过某些点,比如1->N,或1->2-> ...
随机推荐
- Pascal “内存病毒”(骗人的)
Pascal内存病毒 Chaobs从互联网上获得 pascal病毒虽然说只用Ctrl+Pause Break就可以关闭,但是像有些程序一旦启动,不用等你找到那两个键,就自己运行结束关闭了.比如下面一个 ...
- USACO Section1.2 Palindromic Squares 解题报告
palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- linux运维笔记
一.查找大文件 sudo find / -size +100M -exec ls -lh {} \;
- 【Divided Two】cpp
题目: Divide two integers without using multiplication, division and mod operator. If it is overflow, ...
- 基于Python的selenuim自动化测试尝试
工作这么多年了,终于狠下心好好开始学学自动化测试相关知识,揭开这层神秘的面纱. 困难重重,障碍很多,但好在每天都多少有点小收获. 很感谢一个QQ好友推荐的虫师,也非常感谢在这个契机读到了虫师编著的&l ...
- 数据库——pymysql模块的使用(13)
1.基本用法——建立链接,获取游标,执行sql语句,关闭 建立远程链接账号和权限 mysql> grant all on *.* to '; Query OK, rows affected, w ...
- A Neural Algorithm of Artistic Style
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/53931536 1. 资源 Paper: ...
- CodeForces C. Maximal Intersection
http://codeforces.com/contest/1029/problem/C You are given nn segments on a number line; each endpoi ...
- git上导出的maven项目转成正常的Dynamic web project
项目地址:http://git.oschina.net/jiafuwei0407/springmvc,springmvc maven项目 包含日志的测试 restful api 如何在eclipse ...
- SHH框架的搭建
建立一个Web项目,然后导入如下包 l struts2包:在struts2-blank.war下的lib目录下,以及struts-2.3.15.1\lib下的struts和spring整合的插件包s ...