E. Double Elimination (DP)
题目:传送门
题意:有 2^n 个人进行比赛,对他们编号 1~2^n,起初1和2打,3和4打,5和6打,7和8打...,然后1和2打完胜利的 和 3和4打完胜利的再打一场,1和2打完失败的和3和4打完失败的也再打一场,然后,失败组最终胜利的和胜利组最终胜利的再打一场。详情可看样例解释,结合着更容易理解。你有 k 个喜欢的队, 你想观看更多的你喜欢的队的比赛,你能决定比赛的胜利,问你最多能看多少场有你喜欢的队的比赛。
2 <= n <= 17 , 0 <= k <= 2^n
题解: 这里有个视频的讲解 戳
#include <bits/stdc++.h>
#define LL long long
#define mem(i, j) memset(i, j, sizeof(i))
#define rep(i, j, k) for(int i = j; i <= k; i++)
#define dep(i, j, k) for(int i = k; i >= j; i--)
#define pb push_back
#define make make_pair
#define INF INT_MAX
#define inf LLONG_MAX
#define PI acos(-1)
using namespace std; const int N = ( << ) + ;
///设 dp[ i ][ j ][ f1 ][ f2 ] 为从 j 开始,连续的 2^(i - 1) 个人比赛,胜利组胜出的人 0/1(f1) 你喜欢的队,失败组胜出的人 0/1(f2) 你喜欢的队。
int dp[][N][][];
int vis[N];
int main() { int n, k, x; scanf("%d %d", &n, &k); rep(i, , k) {
scanf("%d", &x);
vis[x - ] = ;
} mem(dp, -0x3f3f3f); rep(i, , n) {
for(int j = ; j < ( << n); j += ( << i)) {
if(i == ) {
rep(x1, , ) rep(x2, , ) {
if((x1 + x2) != (vis[j] + vis[j + ])) continue;
dp[i][j][x1][x2] = ((x1 + x2) > ? : );
}
}
else {
rep(x1, , ) rep(y1, , ) rep(x2, , ) rep(y2, , ) {
///x1,y1是从j开始连续的2^(i-1)个人比完后胜利者剩下的那个人的状态和失败组剩下的那个人的状态 (0:代表不是我喜欢的球队,1:代表是我喜欢的球队)
///x2,y2是从j+(1<<(i-1))开始连续的2^(i-1)个人比完后剩下的那个人的状态和失败者剩下的那个人的状态
///那么会有两次比赛,x1跟x2打,y1跟y2打,然后第二次有八种情况,逐个讨论
int res = dp[i - ][j][x1][y1] + dp[i - ][j + ( << (i - ))][x2][y2];
if(x1 || x2) res++; ///第一次比赛,先考虑
if(y1 || y2) res++; ///失败者最终胜利的是x2,那么有两种情况
dp[i][j][x1][x2] = max(dp[i][j][x1][x2], res + ( ( x2 + y1 > ) ? : ) ); ///第一次比赛时失败组胜出的是y1,然后y1会跟x2再比一场
dp[i][j][x1][x2] = max(dp[i][j][x1][x2], res + ( ( x2 + y2 > ) ? : ) ); ///第一次比赛时失败组胜出的是y2,然后y2会跟x2再比一场 /// 失败者最终胜利的分别是y1和y2,第一次比赛时胜利者胜出的是x1
dp[i][j][x1][y1] = max(dp[i][j][x1][y1], res + ( ( y1 + x2 > ) ? : ) );///若第一次比赛y1胜出,y1会跟x2再比一场
dp[i][j][x1][y2] = max(dp[i][j][x1][y2], res + ( ( y2 + x2 > ) ? : ) );///若第一次比赛y2胜出,y2会跟x2再比一场 ///下同,只是换成了最终胜利的是x2
dp[i][j][x2][x1] = max(dp[i][j][x2][x1], res + ( ( x1 + y1 > ) ? : ) );
dp[i][j][x2][x1] = max(dp[i][j][x2][x1], res + ( ( x1 + y2 > ) ? : ) ); dp[i][j][x2][y1] = max(dp[i][j][x2][y1], res + ( ( y1 + x1 > ) ? : ) );
dp[i][j][x2][y2] = max(dp[i][j][x2][y2], res + ( ( y2 + x1 > ) ? : ) );
}
}
}
} int ans = ;
rep(x1, , ) rep(y1, , ) {
int res = dp[n][][x1][y1];
if(x1 || y1) res++;
ans = max(ans, res);
}
printf("%d\n", ans); return ;
}
E. Double Elimination (DP)的更多相关文章
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【CF618F】Double Knapsack(构造)
[CF618F]Double Knapsack(构造) 题面 洛谷 Codeforces 题解 很妙的一道题. 发现找两个数集很不爽,我们强制加强限制,我们来找两个区间,使得他们的区间和相等. 把区间 ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
随机推荐
- 008、Java中变量与常量的区别
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- IQueryable 转DataTable
public static DataTable CopyToDataTable<T>(IEnumerable<T> array) { var ret = new DataTab ...
- 关于js中异步问题的解决方案
在js中有一个始终无法绕过的问题,如何优雅地解决异步问题.实际上,js在执行过程中,每遇到一个异步函数,都会将这个异步函数放入一个异步队列中,只有当同步线程执行结束之后,才会开始执行异步队列中的函数, ...
- net.sf.json.JSONObject maven下载到了但是java后台一直用不了问题
需求,实体转JSON,然后用到JSONObject转JSON,但是我向下面这样引入,后台就是用不了,还是报红, <dependency> <groupId>net.sf.jso ...
- POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10172 Accepted: 4160 Desc ...
- GNS3 模拟icmp目标不可达
目标不可达: R1 : conf t int f0/0 no shutdown ip add 192.168.1.1 255.255.255.0 end R2 f0/0: conf t int f0/ ...
- TextBoxFor()扩展方法
1.扩展方法 public static class TextBoxForHelper { public static MvcHtmlString CreateTextBoxFor<TModel ...
- 八十二、SAP中的ALV创建之一,新建一个程序
一.创建一个ALV的程序 二.填写程序属性 三.保存到本地对象 四.来到代码区,这样一个新工程就创建好了,我们后续来写相关的创建代码
- 039-PHP使用闭包函数来进行父实例的变量自增,错误示例
<?php // 如何使用闭包函数来进行父实例的变量自增,错误示例 function demo(){ $num = 1; $func = function() use($num){ echo $ ...
- Assignment写作谨慎学术抄袭是关键
学术写作(Academic Writing)作为留学生涯的“必修课”,总是让闻者叹气,抓耳挠腮.初入课堂的留学生,更是缺乏写作经验不知从何下笔,只想仰天长啸“Essay真的好难啊!!”面对一个Essa ...