hdu 6196 搜索+剪枝 原创 fish04 2022-05-27 20:36:35 博主文章分类:dp ©著作权 文章标签 #include #define ide 文章分类 后端开发 ©著作权归作者所有:来自51CTO博客作者fish04的原创作品,请联系作者获取转载授权,否则将追究法律责任 Today, Bob plays with a child. There is a row of n numbers. One can takes a number from the left side or the right side in turns and gets the grade which equals to the number. Bob knows that the child always chooses the bigger number of the left side and right side. If the number from two sides is equal, child will always choose the left one. The child takes first and the person who gets more grade wins. The child will be happy only when he wins the game. Bob wants to make the child happy, please help him calculate the minimal difference of their grades when he loses the game. InputThere are T test cases (T≤2). For each test case: the first line only contains a number n (1≤n≤90&&n%2==0) The second line contains n integers: a1,a2…an(1≤ai≤105). OutputFor each test ease, you should output the minimal difference of their grades when Bob loses the game. If Bob can't lose the game, output "The child will be unhappy...". Sample Input42 1 5 322 2Sample Output5The child will be unhappy...Child每次取最大的,如果相等就取左边的;那么我们可以记忆化搜索出[L,R]区间的按游戏规则的可以取到的最大值和最小值;df 表示 Grade_bob - Grade_child 的值;如果df+dpmin[L,R]>0,那么剪去;如果df+dpmax[L,R]<=ans,剪去;如果df+dpmax[L,R]<0,更新,return;然后就是搜索了,(卡时也是秀)#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#include//#pragma GCC optimize(2)using namespace std;#define maxn 200005#define inf 0x7fffffff//#define INF 1e18#define rdint(x) scanf("%d",&x)#define rdllt(x) scanf("%lld",&x)#define rdult(x) scanf("%lu",&x)#define rdlf(x) scanf("%lf",&x)#define rdstr(x) scanf("%s",x)#define mclr(x,a) memset((x),a,sizeof(x))typedef long long ll;typedef unsigned long long ull;typedef unsigned int U;#define ms(x) memset((x),0,sizeof(x))const long long int mod = 1e9;#define Mod 1000000000#define sq(x) (x)*(x)#define eps 1e-5typedef pair pii;#define pi acos(-1.0)//const int N = 1005;#define REP(i,n) for(int i=0;i<(n);i++)typedef pair pii;inline int rd() { int x = 0; char c = getchar(); bool f = false; while (!isdigit(c)) { if (c == '-') f = true; c = getchar(); } while (isdigit(c)) { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return f ? -x : x;}ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a%b);}int sqr(int x) { return x * x; }/*ll ans;ll exgcd(ll a, ll b, ll &x, ll &y) { if (!b) { x = 1; y = 0; return a; } ans = exgcd(b, a%b, x, y); ll t = x; x = y; y = t - a / b * y; return ans;}*/int n;int a[maxn];int sum[maxn];int dp1[200][200], dp2[200][200];int ST;int Lim = 0.00045 * CLOCKS_PER_SEC;int DP1(int l, int r) { int &ans = dp1[l][r]; if (ans != -1)return ans; if (l > r)return ans = 0; if (a[l] >= a[r]) ans = min(DP1(l + 1, r - 1) + a[r], DP1(l + 2, r) + a[l + 1]); else ans = min(DP1(l + 1, r - 1) + a[l], DP1(l, r - 2) + a[r - 1]); return ans;}int DP2(int l, int r) { int &ans = dp2[l][r]; if (ans != -1)return ans; if (l > r)return ans = 0; if (a[l] >= a[r]) { ans = max(DP2(l + 1, r - 1) + a[r], DP2(l + 2, r) + a[l + 1]); } else ans = max(DP2(l + 1, r - 1) + a[l], DP2(l, r - 2) + a[r - 1]); return ans;}int ans;void dfs(int l, int r, int df) { if (l > r) { ans = max(ans, df); return; } if (df + 2 * dp1[l][r] - (sum[r] - sum[l - 1]) >= 0)return; if (df + 2 * dp2[l][r] - (sum[r] - sum[l - 1]) <= ans)return; if (df + 2 * dp2[l][r] - (sum[r] - sum[l - 1]) < 0) { ans = max(ans, df + 2 * dp2[l][r] - (sum[r] - sum[l - 1])); return; } if (clock() - ST > Lim)return; if (a[l] >= a[r]) { dfs(l + 1, r - 1, df + a[r] - a[l]); dfs(l + 2, r, df + a[l + 1] - a[l]); } else { dfs(l + 1, r - 1, df + a[l] - a[r]); dfs(l, r - 2, df + a[r - 1] - a[r]); }}int main(){// ios::sync_with_stdio(0); while (cin >> n) { ms(a); ms(sum); for (int i = 1; i <= n; i++)a[i] = rd(), sum[i] = sum[i - 1] + a[i]; ST = clock(); mclr(dp1, -1); mclr(dp2, -1); DP1(1, n); DP2(1, n); ans = -inf; dfs(1, n, 0); ans = abs(ans); if (ans >= inf) { puts("The child will be unhappy..."); } else printf("%d\n", ans); } return 0;} EPFL - Fighting 赞 收藏 评论 分享 举报 上一篇:[SDOi2012]Longge的问题 BZOJ2705 数学 下一篇:没有上司的舞会 树形dp 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 GaussDB(for MySQL)剪枝功能,让查询性能提升70倍! 如何通过MySQL提升DISTINCT,尤其是多表连接下DISTINCT的查询效率? MySQL 表连接 执行效率 DISTINCT SQL语句 Elasticsearch深入搜索之“多字段”搜索 1. 最佳字段 假设有个网站允许用户搜索博客的内容,以下面两篇博客内容文档为例:PUT /my_index/my_type/1{ "title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen."}PUT /my_index/my_type/2{ "title": "Keeping 搜索 召回率 Elasticsearch 国内AI搜索引擎推荐(一)秘塔AI搜索 今天给大家带来一款目前还比较小众,但是有着全新搜索体验的工具——秘塔AI搜索!它主打的口号就是没有广告,直达搜索! 搜索引擎 AI hdu 搜索+剪枝 剪枝是c[i] < ( n*m-cnt+1)/2 ,减掉很多没必要的搜索#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAX 7using namespace std;int a[MAX][MAX];int c C++ 搜索 剪枝 i++ #include hdu1455 Sticks(搜索+剪枝+剪枝+.....+剪枝) SticksTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K hdu1455 hdu 1455 搜索+剪枝 #include i++ 【HDU 6171】Admiral(搜索+剪枝) "多校10 1001 HDU 6171 Admiral" 题意 目标状态是第i行有i+1个i数字(i=0~5)共6行。给你初始状态,数字0可以交换上一行最近的两个和下一行最近的两个。求20步以内到目标状态的最少步数是多少。 题解 设计一个估价函数来剪枝,每个数最少需要|a[i][j] i|步回到自己 bfs HDU 5113 Black And White(搜索+剪枝) 题意:给你一个不超过5X5的矩阵,有k种颜色,每种颜色有c[i]个,问可不可以把;int mp[6][6];int color i++ sed ci hdu 4090(搜索+可行性剪枝) 解题思路:这道题一开始我想用bfs,但这道用dfs+剪枝。。关键还是位置移动的部分没有完全弄明白。。。#include#i 搜索 i++ #include ios HDU 6196 happy happy happy (2017沈阳网赛 - 搜索 + dp + [黑科技。。。]) 题意:儿子和爸爸选牌, 每一次每个人只能从最左边选择或者在最右边选择, 儿子的决策是 选左边 和 右边最大的那个位置, 如果一样大, 选择左边, 爸爸的决策是为了让儿子赢, 问你 如果儿子能赢 爸爸与儿子的最小分数差是多少, 如果无论如和 爸爸都赢儿子 输出The child will be unhappy...思路 HDU 搜索 dp ide #include 连连看 HDU - 1175_搜索_剪枝 hdu有毒,考试上 AC 的就是一直 WA…其实这道题是可以进行初始化来进行优化的,这样的话询问次数是可以达到 10510^5105 的。不过普通的 dfsdfsdfs + 剪枝也是可过的。Code:#include#include#includeusing... 数学 HDU 4848 Wow! Such Conquering! (记忆化搜索,剪枝) Wow! Such Conquering!Time Limit: 15000/8000 MS (Java/Others) i++ #include Java hdu 1692(枚举+剪枝) 题意:给你一些井的信息,井中原有 dp #include i++ ios poj 2078(搜索+剪枝) 解题思路:可以一行一行地递归求解,要 搜索 i++ #include ios poj 1948(搜索+剪枝) 解题思路:这道题看到数据量,想到ncludeusing names 搜索 #include ios ci POJ - 1011 搜索剪枝 POJ2392和这题很类似~~只是这题更加强悍些~~~除了2392里要注意的搜索方式以及搜索顺序从大的到小外还有更多要注意的.. blog c 搜索 sed #include hdu 1518(DFS+剪枝) Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13374 Accepted Submission(s): 4244 Proble hdu 搜索 DFS 编程 HDU 6005 Pandaland——dijkstra + 剪枝 #include #include #include #include #include #include #include #include using namesp, n, cnt, ans, d[maxn], #include i++ ios HDU 2437 Jerboas (剪枝搜索) 题意:给定一幅图,图上有两种点T,P.......一只跳鼠在一个T点作为起始点,它想通过图上的路到达某个P点,P点满足如下要求:(1).到达P点的途中路径权值为k的倍数(2).尽量让路径权值取最小(3).权值相同时 #include i++ 权值 记忆化搜索 ios poj 1198 hdu 1401 搜索+剪枝 Solitaire 写到一半才发现能够用双向搜索4层来写,但已经不愿意改了,干脆暴搜+剪枝水过去算了。想到一个非常水的剪枝,h函数为 当前点到终点4个点的最短距离加起来除以2。由于最多一步走2格,然后在HDU上T了,又发现再搜索过程中。这个估价函数应该是递减的(贪心),再加上这个剪枝就过了。#include#inclu... #include i++ ios 双向搜索 搜索 IDA*、剪枝、较难搜索——DNA sequence HDU - 1560 万恶之源 ###翻译 题意就是给出N个DNA序列,要求出一个包含这n个序列的最短序列是多长 这是一道搜索题,为什么呢?从样例可以感受到,我们应该从左往右“扫描”,从n个DNA序列中取出某个特定的字母,直到n个序列都被取空。题目便是要求这个“取出”次数的最小值。而我们每次都选择A,T,C,G中的其中一 ... i++ #include 递归 函数返回 子函数 Centos 硬盘超2T扩容 随着阿里云技术越来越强大,相信很多做seo优化的朋友在建网站的时候已经不再局限于使用虚拟主机来玩建站和优化了,那样限制因素太多了,于是都会弄台ECS云服务器来玩玩,配置可以按自己的意愿来弄,可以配个基础版玩玩,也可以配个高端的来玩玩,但对于新手为说,一般都会选择一个基础配置的ecs来先玩一下,安装系统自然就是自己熟悉什么就弄什么系统来玩了。 由于我之前使用的服务器是公司原来的技术人员配置的wi Centos 硬盘超2T扩容 阿里云 云服务器 centos 数据盘 有了springmvc是不是就不用序列化接口 1. Controller的生命周期 Spring框架默认创建的对象是单例.所以业务控制器是一个单例对象. 单例对象带来的问题,就是请求的数据如果放在成员变量上面,会相互影响。请求使用同一个对象处理,在处理的请求比较多的时候,会导致阻塞!!。 SpringMVC提供了,request,session 两个生命周期request:每次新的请求,创建一个新的实例.sess 上传 MVC 拦截器 mysql 优先将ID排序 本文测试用例的数据表tb_goods:1、CONCAT()函数【1】功能:将多个字符串连接成一个字符串。【2】语法:concat(str1, str2,...)返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。测试SQL:SELECTCONCAT(A.id, A.brand ) AS goodsFROMtb_goods AWHERE A.id < '10577 mysql 优先将ID排序 Mysql中concat优先级 字符串 分隔符 SQL simulink matlab function 嵌套函数 目录 函数类型文件中的局部和嵌套函数子文件夹中的私有函数无需文件的匿名函数函数类型文件中的局部和嵌套函数 程序文件可以包含多个函数。局部和嵌套函数可用于将程序分为更小的任务,使读取和维护代码变得更容易。   matlab 开发语言 嵌套 句柄 匿名函数 java socket相应超时时间设置 一、Socket使用时应当注意的一些问题1.设置超时,从套接字读取信息时,在有数据可供访问之前,读操作会被阻塞,如果此时主机不可达,那么程序将会等待很长时间,并因为系统操作系统的限制最终导致超时调用setSoTimeout方法设置Socket s = new Socket(...);s.setSoTimeout(10000);对构造器Socket(String host,int port),可以先 java socket相应超时时间设置 socket java 应用 客户端 数据 服务器