Codeforces Round #222 (Div. 1) C. Captains Mode 对弈+dp
题目链接:
http://codeforces.com/contest/378/problem/E
题意:
dota选英雄,现在有n个英雄,m个回合,两支队伍:
每一回合两个选择:
b 1,队伍一ban掉一个英雄,或是跳过这个回合
p 1,队伍1选一个英雄
现在每个队伍都是最优决策,问最后队伍一的英雄实力和-队伍二的英雄实力和。
题解:
状压dp,决策要倒过来做,也就是dp出后面回合的决策的基础上设计出对自己当前回合对自己最有利的决策。、
注意:只有top m的英雄有可能被选,其他的都不可能被选中。
dp[x]表示目前回合两支队伍的实力差。(其中每一位bit代表一个英雄,1说明英雄被ban或被p了,0表示该英雄还没有被选或被ban。
代码;
#include<iostream>
#include<utility>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std; typedef long long LL;
const int maxn=<<;
const int INF=0x3f3f3f3f; int dp[maxn],op[],val[];
int n,m,team[]; inline int cnt_bit(int x){
return x==?:(x&)+cnt_bit(x>>);
} bool cmp(int a,int b){
return a>b;
} int main(){
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%d",val+i);
sort(val,val+n,cmp);
scanf("%d",&m);
char s[];
for(int i=m;i>=;i--){
scanf("%s%d",s,&team[i]);
op[i]=(s[]=='p');
}
dp[]=;
for(int i=;i<(<<m);i++){
int cur=cnt_bit(i);
if(team[cur]==){
dp[i]=-INF;
for(int j=;j<m;j++){
if(i&(<<j)){
dp[i]=max(dp[i],dp[i^(<<j)]+op[cur]*val[j]);
}
}
}else{
dp[i]=INF;
for(int j=;j<m;j++){
if(i&(<<j)){
dp[i]=min(dp[i],dp[i^(<<j)]-op[cur]*val[j]);
}
}
}
}
printf("%d\n",dp[(<<m)-]);
return ;
}
Codeforces Round #222 (Div. 1) C. Captains Mode 对弈+dp的更多相关文章
- Codeforces Round #222 (Div. 1) C. Captains Mode 状压
C. Captains Mode 题目连接: http://codeforces.com/contest/377/problem/C Description Kostya is a progamer ...
- Codeforces Round #367 (Div. 2) C. Hard problem(DP)
Hard problem 题目链接: http://codeforces.com/contest/706/problem/C Description Vasiliy is fond of solvin ...
- Codeforces Round #222 (Div. 1) D. Developing Game 扫描线
D. Developing Game 题目连接: http://www.codeforces.com/contest/377/problem/D Description Pavel is going ...
- Codeforces Round #222 (Div. 1) B. Preparing for the Contest 二分+线段树
B. Preparing for the Contest 题目连接: http://codeforces.com/contest/377/problem/B Description Soon ther ...
- Codeforces Round #222 (Div. 1) A. Maze dfs
A. Maze 题目连接: http://codeforces.com/contest/377/problem/A Description Pavel loves grid mazes. A grid ...
- Codeforces Round #222 (Div. 1) Maze —— dfs(连通块)
题目链接:http://codeforces.com/problemset/problem/377/A 题解: 有tot个空格(输入时统计),把其中k个空格变为wall,问怎么变才能使得剩下的空格依然 ...
- Codeforces Round #222 (Div. 1) (ABCDE)
377A Maze 大意: 给定棋盘, 保证初始所有白格连通, 求将$k$个白格变为黑格, 使得白格仍然连通. $dfs$回溯时删除即可. #include <iostream> #inc ...
- Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
D. Developing Game Pavel is going to make a game of his dream. However, he knows that he can't mak ...
- Codeforces Round #222 (Div. 1) D. Developing Game
D - Developing Game 思路:我们先枚举左边界,把合法的都扣出来,那么对于这些合法的来说值有v 和 r两维了,把v, r看成线段的两端, 问题就变成了,最多能选多少线段 使得不存在这样 ...
随机推荐
- 在sql-server上建立mysql链接库
EXEC sp_addlinkedserver @server = N'RESUME_MYSQL_CONN', @srvproduct=N'MySQL ODBC 5.1 Driver', @provi ...
- sql with as用法详解
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让 ...
- iOS访问通讯录开发-读取联系人信息
读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- 多任务(二)
VxWorks的系统任务 VxWorks在引导时启动的系统任务依赖于配置,有些总是运行.任务集与VxWorks的基本配置相关,很少的任务常用于可选的组件. 注意:别挂起.删除或改变任何系统任务的优先级 ...
- call与apply函数
call与apply函数 1.为什么需要call与apply函数 Javascript中,每一个函数内部都有一个特殊的关键词this,其随着所处环境的不同其指向也是不同的. 函数的内部其this也是指 ...
- Spring Security (Acegi)的登陆配置
简短记录一下: 在authenticationProcessingFilter这个bean中,如果没有配置<property name="alwaysUseDefaultTargetU ...
- js设计模式(7)---装饰者模式
0.前言 下午做事效率很低,无精打采的,整个脑子就跟浆糊一样,看看时间一点点流去,心中只能无可奈何,哎,码农的激情难道就这么容易熄灭吗? 1.该模式的使用情况 假如我们想给对象增加功能,但是又不想修改 ...
- 通信协议之HTTP,UDP,TCP协议
1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...
- 万能的SQLHelper帮助类
/// <summary> /// 数据库帮助类 /// </summary> public class SQLHelper { private static string c ...
- Zencart 国家排序及中文名称的扩展
最终实现效果如上 具体步骤: 1. 手动或SQL修改数据表,增加2个字段 ) ) '; 2. 修改admin/countries.php文件,增加表单插入编辑功能, 共计7处,此处忽略具体代码. 3. ...