hdu6196 happpy happy happy (meet in middle + 剪枝)
题意
从1到n共计n(<=90)个物品,每个物品有一个价值a[i],儿子和爸爸轮流做游戏,儿子先手。儿子每次选价值最大的{最左边,最右边}的物品,如果价值一样大, 则选取最左边的物品。 爸爸每次可以取最左边或最右边的物品。
问你,爸爸想要输(价格严格小),而且差值尽可能少的最小差值是多少。
分析
首先n<=90,所以应该是个搜索,而不是dp
我们来考虑一下为什么不是dp,而只能搜索?
如果题目改成爸爸想让差值最大或者最小,那么显然可以直接dp,而这里实际上求一个大于0的最小差值,相当于在所有可能差值的中间,自然无法dp了
直接dfs显然时间效率是$O(2^{45})$无法接受,这里可以考虑meet in middle,我们将90个物品分成44个和46个
对于里面的部分,我们可以先dfs求出所有可能差值,然后再dfs外面,如果当前长度<=44了,那么我们就可以将当前结果在之前第一次dfs的结果里二分,找到大于0的最小差值
这样时间复杂度就是$O(2^{23}*log(2^{22}))$
这样的时间复杂度感觉勉强是可以接受的,但问题是,2^22这么多取值我们无法存进数组中
那我们只有加大两部分的差值了,比如提前预处理长度为30的结果,再去对长度为50的dfs
但这样的话,对50的dfs部分时间复杂度是$O(2^{25}*log(2^{15}))$,我们必须剪枝
对于dfs(l,r),有两个剪枝:
如果当前差值+[l,r]最大差值<=0,这说明这种情况儿子始终无法赢,直接return
如果当前差值+[l,r]最小差值>=ans,这说明这种情况下的结果不会比ans更优,直接return
加上这两个剪枝就可以1800ms通过了
hdu6196 happpy happy happy (meet in middle + 剪枝)的更多相关文章
- 【CF525E】Anya and Cubes(meet in middle)
点此看题面 大致题意: 在\(n\)个数中选任意个数,并使其中至多\(k\)个数\(x_i\)变为\(x_i!\),求使这些数和为\(S\)的方案数. \(meet\ in\ middle\) 这应该 ...
- 【meet in middle】poj1840Eqs
震惊!map的常数居然如此之大 Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43 ...
- 【状态压缩 meet in middle】poj3139Balancing the Scale
数组溢出真是可怕的事情 Description You are given a strange scale (see the figure below), and you are wondering ...
- POJ 1198 / HDU 1401 Solitaire (记忆化搜索+meet in middle)
题目大意:给你一个8*8的棋盘,上面有四个棋子,给你一个初始排布,一个目标排布,每次移动,可以把一个棋子移动到一个相邻的空位,或者跨过1个相邻的棋子,在保证棋子移动不超过8次的情况下,问能否把棋盘上的 ...
- 【构造 meet in middle 随机 矩阵树定理】#75. 【UR #6】智商锁
没智商了 变式可见:[构造 思维题]7.12道路建设 当你自信满满地把你认为的正确密码输入后,时光机滴滴报警 —— 密码错误.你摊坐在了地上. 黑衣人满意地拍了拍你的肩膀:“小伙子,不错嘛.虽然没解开 ...
- [CSP-S模拟测试]:f(Trie树+二分答案+meet in middle+two pointers)
题目传送门(内部题67) 输入格式 第一行,三个整数$n$.$k$.$p$.第二行,$n$个自然数,表示$\{a_i\}$. 输出格式 输出一行,两个自然数,表示$f(res)$.$res$. 样例 ...
- meet in the middle 折半搜索 刷题记录
复杂度分析 假设本来是n层,本来复杂度是O(2^n),如果meet in middle那就是n/2层,那复杂度变为O( 2^(n/2) ),跟原来的复杂度相比就相当于开了个方 比如如果n=40那爆搜2 ...
- BZOJ_2679_[Usaco2012 Open]Balanced Cow Subsets _meet in middle+双指针
BZOJ_2679_[Usaco2012 Open]Balanced Cow Subsets _meet in middle+双指针 Description Farmer John's owns N ...
- CCPC2016杭州现场赛
A(hdu5933):(贪心) 题意:长度为n的数组: a1, a2,⋯, 每次操作要么可以merge两个相邻的数为一个, 值为两个数的和; 要么可以把一个数分裂成两个, 两个数的和为原数. 用最少的 ...
随机推荐
- learnpythonthehardway EX41 相关
str.count() # str.count()方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. # str.count(sub, start= 0,end=len( ...
- navicat 链接数据库查看的工具 可以同时查看各种数据库 MySql SqlServer
navicat 链接数据库查看的工具 Navicat_Premium_10.0.11.0_XiaZaiBa
- VsCode使用之HTML 中 CSS Class 智能提示
HTML 中 CSS Class 智能提示 安装插件:HTML CSS Support 设置中添加以下代码: "editor.parameterHints": true, &quo ...
- 【搜索】P1032 字串变换
题目描述 已知有两个字串A,B及一组字串变换的规则(至多6个规则): A1 ->B1 A2 -> B2 规则的含义为:在 A中的子串 A1 可以变换为B1,A2 可以变换为 ...
- shell $() vs ${}
reference $( )与` `(反引号)都是用来做命令替换(command substitution)用的 run command 3, 2, 1 command1 $(command2 $(c ...
- Spring Data Redis入门示例:程序配置(五)
单机配置 redis.properties配置 #redis的服务器地址 redis.host=127.0.0.1 #redis的服务端口 redis.port=6379 #客户端超时时间单位是毫秒 ...
- Echarts 异步数据加载遇到的问题
看了Echarts官网异步加载数据的Demo var myChart = echarts.init(document.getElementById('main')); // 显示标题,图例和空的坐标轴 ...
- luogu P2241 统计方形
题目背景 1997年普及组第一题 题目描述 有一个n*m方格的棋盘,求其方格包含多少正方形.长方形 输入输出格式 输入格式: n,m因为原来数据太弱,现规定m小于等于5000,n小于等于5000(原来 ...
- Sdoi2014 向量集
题目描述 题解: 码力太差重构之后才$A……$ 首先求向量点积最大很容易想到凸包, 设已知$(x_0,y_0)$,求$(x,y)$满足$(x,y)*(x_0,y_0)>=(x',y')*(x_0 ...
- matlab ()的用法
经常见到标识符+(),用法比如阵列Y().函数f()..... 时机到了,会总结一下.