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)的更多相关文章

  1. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  2. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  3. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  4. HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP

    题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...

  5. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  6. 状态压缩dp问题

    问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...

  7. BZOJ-1226 学校食堂Dining 状态压缩DP

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...

  8. Marriage Ceremonies(状态压缩dp)

     Marriage Ceremonies Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  9. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

  10. HDU 4511 (AC自动机+状态压缩DP)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4511 题目大意:从1走到N,中间可以选择性经过某些点,比如1->N,或1->2-> ...

随机推荐

  1. Pascal小游戏 井字棋

    一个很经典的井字棋游戏 Pascal源码Chaobs奉上 注意:1.有的FP版本不支持汉语,将会出现乱码.2.别想赢电脑了,平手不错了. 井字过三关: program TicTacToe; uses ...

  2. katalon系列二:selenium IDE的替代者——Katalon Recorder

    Katalon Recorder是和selenium IDE一样的一个浏览器插件,可以录制web上的操作并回放,但我个人感觉Katalon Recorder更好用.大家可以直接在chrome商店下载安 ...

  3. NGUI-为Popuplist的下拉选项添加删除功能

    NGUI例子里的popuplist是这样的:,但有时我们希望下拉选项都有删除功能,也就是这样:,一种方法是改popuplist的源码,我想这个实现起来不难,但现在我想说的是用反射来实现此功能,以及其他 ...

  4. centos6系列问题

    一.NetworkManager启动问题 1.由于以后要支持e1000版虚拟化网卡,所有centos6镜像均按照NetworkManager服务,并设置开机自启动 2.虚机启动时,默认是Network ...

  5. php中变量的详细介绍

    变量的含义: 用于存储信息的容器,在程序运行期间,可以变化的量 变量的命名规则: 1.变量以$符开始 2.变量名只能以字母或下划线开始 3.变量名只能是字母,下划线,数字,不能有特殊字符:逗号,句号, ...

  6. django QuerySet 的常用API

    为了加深对queryset对象api的了解,我们建立了以下示例模型: from django.db import models class Author(models.Model): "&q ...

  7. python与MySQL数据库

    python与MySQL数据库 慕课网连接 我使用的软件:python2.7 + MySQL+ Navicat for MySQL + Atom 注意:你的数据库表格类型的引擎为:InnoDB :字符 ...

  8. Client does not support authentication protocol requested by server

    关于由于版本号码不同而引起的 Client does not support authentication protocol requested by server 问题 搜索类似的问题,得到的答案类 ...

  9. poj 3436 网络流构图经典

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6012   Accepted: 2 ...

  10. HS 光流法详解

    前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 &quo ...