SRM709 div1 Xscoregame(状压dp)
题目大意:
给定一个序列a,包含n个数(n<=15),每个数的大小小于等于50
初始时x = 0,让你每次选a中的一个数y,使得x = x + x^y
问如何安排选择的次序,使得最终结果最大。
考虑状态压缩,dp[S]表示选了S状态的数的最大结果
我们发现这样做是错误的,因为目前的最大并不意味最后的最大
但是我们会发现,y最大只有50,所以x的大于63的部分不会发生变化,只有小于64的部分会受到y异或的结果
所以我们用dp[S][t]表示:选了S状态的数,小于64部分为t是否可行
然后用dp[S][64]代表大于64部分的大小
选第i个数加入的转移就是,先求出小于64部分与A[i]异或的最大值Max
然后大于64部分的大小就是2*dp[S][64] + (Max>>6)
找到所有小于64部分的异或>>6大于1的值,然后更新那些可行的状态即可
最后输出就是大于64的部分<<6再加上小于64部分最大的可行解
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream>
#include <queue>
using namespace std;
void print(int x){
cout<<"*";
while(x){
if(x&) cout<<;
else cout<<;
x>>=;
}
cout<<endl;
}
long long dp[(<<) + ][];
queue<int> Q;
int vis[(<<) + ]; void Find(int S){
for(int i = ; i < ; i++) if(dp[S][i]) cout<<i<<" "; cout<<dp[S][];
cout<<endl;
} class Xscoregame {
public:
int getscore(vector<int> A) {
int n = A.size();
Q.push();
dp[][] = ;
while(!Q.empty()){
int S = Q.front(); Q.pop();
//print(S);
//Find(S);
for(int i = ; i < n; i++){
if(S&(<<i)) continue;
int Max = ;
for(int j = ; j < ; j++){
if(!dp[S][j]) continue;
Max = max(Max, j + (j^A[i]));
}
if(Max == ) continue;
if(dp[S|(<<i)][] > *dp[S][] + (Max>>)) continue;
if(dp[S|(<<i)][] != *dp[S][] + (Max>>))
for(int j = ; j < ; j++) dp[S|(<<i)][j] = ;
if(!vis[S|(<<i)]) Q.push(S|(<<i)); vis[S|(<<i)] = ;
dp[S|(<<i)][] = *dp[S][] + (Max>>);
for(int j = ; j < ; j++){
if(!dp[S][j]) continue;
int temp = j + (j^A[i]);
if((temp>>) == (Max>>)) dp[S|(<<i)][temp&] = ;
}
}
}
long long ans = , temp = ;
for(int i = ; i >= ; i--) if(dp[(<<n)-][i]) { temp = i; break; }
ans += (dp[(<<n)-][]<<) + temp;
return ans;
}
};
SRM709 div1 Xscoregame(状压dp)的更多相关文章
- CCPC-Wannafly Winter Camp Day3 Div1 - 精简改良 - [生成树][状压DP]
题目链接:https://zhixincode.com/contest/14/problem/D?problem_id=206 样例输入 1 5 5 1 2 1 1 3 1 2 4 1 2 5 1 ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) D】精简改良(状压DP)
点此看题面 大致题意: 给你一张图,定义\(dis(i,j)\)为\(i\)与\(j\)的最短距离,现要求删去若干条边,使得图仍然联通,且\(\sum_{i=1}^n\sum_{j=i+1}^ndis ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
随机推荐
- Cython中def,cdef,cpdef的区别
这是我的第一篇翻译,希望大家多多给出意见和建议. 如有转载,请注明出处. 原文来自:https://stackoverflow.com/questions/28362009/definition-of ...
- Flask初学者:视图函数和类视图
当一个url请求进入后台时,一般有两种方式来进行处理:视图函数和类视图.视图函数直接使用一个函数来进行处理并返回数据给浏览器,类视图则是使用类来进行处理并返回的,所以当需要进行的处理比较简单,则可以考 ...
- P1332 血色先锋队
P1332 血色先锋队 题目描述 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重 ...
- 关于C++类模板无法解析的问题
自己写了一个C++模板类,可是在vs2012中死活显示无法解析它的成员函数. 开始怎么也想不通,因为我是按照普通方式布置的:头文件放声明,在同名源文件中放实现,并包含其头文件. 后来百度了一下才发现, ...
- 根据STATUS信息对MySQL进行优化
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一.慢查询mysql> sh ...
- Java开发WebService(使用Java-WS)
前言: 初学Java,因为工作需要,直接跳到开发WebService.以前用.NET开发过WebService,对比一下,Java的WebService开发部署难度高了不止一个档次.网上的教程各式各异 ...
- 【连载】Bootstrap开发漂亮的前端界面之插件开发
相关文章: 1.<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 3.<Bootstrap开发漂亮的前端界面之自定义 ...
- vue3.0 部署的基础流程
1.创建vue.config.js 主要是负责做设置的 2.修改vue.config.js 参考官方说明: 注意:对于本地开发的同学要注意,你之前在处理网络请求时是在8080端口下请求,现在如果换成了 ...
- 揭秘css
这是我看到非常好的一本电子教程,可以当参考手册使用,链接
- 「暑期训练」「Brute Force」 Restoring Painting (CFR353D2B)
题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规 ...