UVa 10891 Game of Sum (区间DP&博弈)

UVa 10891(记忆化搜索,递推)Game of Sum 例题28 Sum游戏(Game of Sum, UVa 10891) 有一个长度为n的整数序列, 两个游戏者A和B轮流取数, A先取。 每 次玩家只能从左端或者右端取一个数, 但不能两端都取。 所有数都被取 走后游戏结束, 然后统计每个人取走的所有数之和, 作为各自的得分。 两个人采取的策略都是让自己的得分尽量高, 并且两人都足够聪明, 求A 的得分减去B的得分后的结果。 【输入格式 阅读详情

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=1832


思路:

for (int i = 1; i <= b - a; i++)
	ans = max(ans, sum[b] - sum[a] - min(f(a + i, b), f(a, b - i)));
return dp[a][b] = ans;
上述代码的dp[a][b]存储的是当数字剩为a~b段时,某人(可以是A,也可以是B)所能取数字的最佳和值,

sum[i]用前缀数组记录数字和值,

那么,作为一方,你能取的最大值就是这段总和减去对方所能取的最小值。


完整代码:

/*0.069s*/

#include<bits/stdc++.h>
using namespace std;
const int N = 105;

int n, dp[N][N], num[N], sum[N];
bool vis[N][N];

int f(int a, int b)
{
	if (a >= b) return 0;
	if (vis[a][b]) return dp[a][b];
	vis[a][b] = true;
	int ans = -INT_MAX, len = b - a;
	for (int i = 1; i <= len; i++)
		ans = max(ans, sum[b] - sum[a] - min(f(a + i, b), f(a, b - i)));
	return dp[a][b] = ans;
}

int main()
{
	while (scanf("%d", &n), n)
	{
		memset(dp, 0, sizeof(dp));
		memset(vis, 0, sizeof(vis));
		for (int i = 1; i <= n; i++)
		{
			scanf("%d", &num[i]);
			sum[i] = sum[i - 1] + num[i];///前缀数组
		}
		printf("%d\n", f(0, n) * 2 - sum[n]);
	}
	return 0;
}

小红书爬取实战指南 以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。 阅读详情

相关推荐

LLCE、PFE模块,二层交换/桥接的通用学习转发机制

NXP 文档里给出的正式全称如下:面向 CAN/CAN-FD、LIN、FlexRay 的“低延迟通信引擎”,用多核 M0 固件做报文收发、过滤、路由,把主 CPU 中断负荷降到几乎 0。“数据包转发引擎”,负责以太网帧的分类、修改、转发、VLAN/NAT/IPsec 等 offload,支持 2 Gbit/s 线速且主机负载 ≈0。两者都跑各自固件,通过内部 AXI 桥可互连,实现“CAN→ETH”零主核参与的硬件级网关功能。是它们都集成在。

qq_25461777的博客 1303

UVA - 10891——Game of Sum(区间dP)

题目链接:https://vjudge.net/problem/UVA-10891 题意:n个数的序列,A和B两个人比赛,A先取,可以从剩下序列的左边或者右边开始取,每次任取1~n个数字,两人都用最优方案,求A的总和减去B的总和 思路:dp[i][j]表示区间i~j先手能获得的最大值。 dp[i][j]=sum[i][j]-min{dp[i+1][j]......dp[...

creator平 235

GSEA富集分析实战:从数据准备到结果解读的完整R代码指南

本文提供了一份完整的GSEA富集分析实战指南,涵盖从R环境准备、数据质量控制到基因ID转换、参数优化和结果解读的全流程。通过详细的R代码示例和实用技巧,帮助研究人员高效完成基因集富集分析,特别针对生物信息学中常见的GSEA分析痛点提供了专业解决方案。

weixin_29246195的博客 536

uva10891 Game of Sum(博弈论+dp)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=11&problem=1832&mosmsg=Submission+received+with+ID+13415943 感觉博弈题写的很纠结。。。 ...

akk99296的博客 183

人工智能训练师技能等级认定四级技能考核试卷-样题4

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总时长150分钟。考核内容涵盖:1)车牌数据集规范评估与格式处理;2)车牌数据集采集代码修改与数据处理;3)房价预测数据集加载、预处理与可视化分析;4)车牌标注数据集审核与修正;5)螺丝螺母检测数据集的平台创建与共享;6)螺丝螺母数据的去噪处理与标注优化。要求考生使用Python编程、数据处理平台和标注工具完成各项任务,重点考察数据加载、格式转换、缺失值处理、数据可视化、标注审核及平台操作等技能。所有操作需在配备Python3.7和深度学习平台的W

weixin_42221934的博客 348

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

2025年五一数学建模竞赛 A题:基于历史数据与模式识别的道路车流量推测模型研究

Magnolia_He的博客 3783

Game of Sum UVA - 10891

问题 https://vjudge.net/problem/UVA-10891 分析 就是n台计算机上运行这n种服务,每个计算机都可以选择一种服务,使得它和相邻计算机上的这种服务停止,问也最多能够停止多少种服务。 #include <iostream> #include <cstdio> #include <cmath> #include <cstring...

zpf1998的博客 171

【架构师面试-缓存与搜索-1】-缓存与缓存置换策略源码实现

1:什么是缓存 缓存:加速数据访问的存储,降低延迟(latency),提升吞吐量(Throughput)的利器。 1:缓存演进历史 1. 查库 2. ConcurrentHashMap 3. LRU 4. Guava Cache 5. 分布式缓存(redis,MemCache) 6. 多级缓存 2:在什么地方加缓存 缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 举个栗子:假设一个网站,需要提高性能,缓存可以放在浏览器,可以放

chongfa2008的博客 6437

UVA-10891 Game of Sum 博弈 区间Dp Python

一、题意 This is a two player game. Initially there are n integer numbers in an array and players A and B get chance to take them alternatively. Each player can take one or more numbers from the left or ...

zhaominyiz的博客 348

Faster Planner——Kinodynamic Astar详解

实际成本和启发式成本 实际成本 Actual Cost   每条轨迹的真实代价函数定义如下: J(T)=∫0T∥u(t)∥2dt+ρT \mathcal{J}(T)=\int_{0}^{T}\|\mathbf{u}(t)\|^{2} d t+\rho T J(T)=∫0T​∥u(t)∥2dt+ρT 离散形式下: 启发成本 Heuristic Cost pμ∗(t)=16αμt3+12βμt2+vμc+pμc=pμc+vμc+T2∗((2∗vμc−2∗vμg)/(2∗T)−(6∗pμc−6∗pμg+6∗T∗v

漫长IT路 4831

Linux 下安装 openjdk 17【详细步骤】

JDK17,安装教程。

甘蓝的专栏 7503

uva10891 Game of Sum 博弈区间dp

// uva10891 Game of Sum // 这是在训练指南上看到的一题,啃了很久很久,到现在有 // 一定的动态规划的基础,然而博弈性的东西依然不会 // // // 一开始想的是dp(i,j)表示在i,j段取得最大值 // dp(i,j) = max(dp(i,i),d(i.i+1),...d(i,j-1),d(j-1,j),d(j-2,j)...d(i+1)(j);,sum(i,j

TIMELIMITE的专栏 634

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4785

UVa 10891 - Game of Sum 动态规划,博弈 难度: 0

题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1832 题意 n个数据,A,B两个玩家轮流从两端取1到多个数字,最终数字加和为分数,分数最大的获胜,A为先手,二者都很聪明,求A分数-B分数。 思路 如刘书, ...

weixin_30512785的博客 188

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

UVa10891 Game of Sum

给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取。两人都采用最优策略,A先手,问A和B各自得到数字的和的差值最大为多少? 区间DP F[i][j]表示区间i~j内A能得到的最大数字和。 1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #i...

dezhen7015的博客 112

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

UVa 10891 Game of Sum(博弈区间DP)

题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取。 并且A B都尽力使自己选择的结果为最大的,可以理解成A B每一步走的都是最优的。 如果A先选择,则A B差值最大是多少。 思路:dp[i][j]维护玩家A可以选的最大值。初始化为0,表示什么都没有选,所以值为0。然后对每个区间(i,j),选取其中的点k扫描其子区间。因为我们要找的是最大的值,所

ACMiao的博客 476

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

UVA 10891 Game of Sum(博弈dp)

题目大意:给你n个数,两个人轮流取,可以从左边开始去取连续的任意个,或者从右边取连续的任意个, 注意不能从两头取,所有的数都被取完游戏结束,输出先手与后手的分差; 解析:dp[i][j]   表示i~j区间内先手取的最大值,所以dp[1][n]表示的是取完所有数之后的最大值, 由于求的是最大值,所以给后手留下最小的,分两种情况,1.留给后手i+1~r区间;2.给后手留l~k区间 所以结...

zx93的博客 371

UVA10891- Game of Sum 区间博弈-dp递推

题目: 两个玩家A和B在玩一个取石子游戏,且每个石子都有它们各自的价值。在游戏中有这样一个规则:每次取一个石子或者连续几个都必从两端取,要么是最左端,要么是最右端,直到取完为止。两个玩家都非常聪明,他们每次都会去最优的结果。给他们N个石子,你能计算出玩家A,B各自的最后结果吗?假设总是玩家A先开局。 #include <bits/stdc++.h> #define LL long l...

H_ang的博客 237

uva 10891 - Game of Sum

题目:uva 10891 - Game of Sum 题意:一排石子,每次可以从左边或者右边拿若干个,求先后手差值的最大值 思路:dp #include #include #include #include #include using namespace std; #define maxn 110 bool vis[maxn][maxn]; int dp[maxn][maxn

shiyuan的专栏 926

UVA 10891 - Game of Sum (博弈+区间DP+记忆化搜索)

Root     10891 - Game of Sum Time limit: 3.000 seconds This is a two player game. Initially there are n integer numbers in an array and players A and B get chance to take them alt

Ever_glow的博客 789

Uva 10891 Game of Sum(区间博弈dp)

Uva 10891 Game of Sum(区间博弈dp) —— black的专栏 —— waShaXiu

black的专栏 758

Uva 10891 Game of Sum

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19461 题目大意:有个长为n的整数序列,A和B两个人轮流从数列左端或右端取任意数量的数,但不能两端都取,两个人都会让自己的得分尽量大,求A的得分减去B的得分。 题目分析: 解法一:        因为分数总和是一定的,所以一个人的得分越高,另一个就越

cyclization的小栈 497

Uva 10891 Game of Sum (经典博弈区间DP)

题意:给定一个长度为n的整数序列,A和B轮流取数,A先取,一次只能从左端或者右端取任意数量个数,所有数取完后求A的得分减去B的得分,A,B都采取最优策略。 分析:这题用记忆化搜索很容易理解,总和是一定的,所以一个得分越高,另一个人的得分越低。当前状态总是最开始的状态的一个子状态。d(i,j): 先手取 i ~ j 最优策略下,得分最大值。d(i,j) = sum(i,j) - min(d(i+1...

常胜将军的博客 273

UVA-10891 Game of Sum ,博弈区间dp,谈谈个人理解和做法

原题:https://vjudge.net/problem/UVA-10891 题意:一个长度为n的序列,两个人A,B轮流取,A先取,每次玩家只能从左端或者右端取数,所有数字取走后游戏结束,统计所取得数字之和,求A的得分减B的得分的最大值。 A,B都足够聪明因此他们都能做出最优的决策。 数据范围: 1<=n<=100. 对于这类型的题目不需要分开考虑A,B,因为A,B都做出自己最...

forOnward的博客 291

UVA 10891 Game of Sum

UVA_10891 一开始想到了极大极小的思路,但觉得这不就变成极大极小搜索了么,后来便没继续往下想。 看了别人的题解后发现果然就是极大极小的博弈思想,只不过由于搜索过程中状态有限而且有些状态是重复的,因此可以用记忆化搜索来降低复杂度。当然也可以用递推形式的动规来做。 以后有想法了之后一定要敢于去实现自己的想法。 如果设f[i][j]表示面临由i到j这样一个...

weixin_30300225的博客 103

UVA 10891 Game of Sum 总和一定的博弈,区间dp

参考:刘汝佳大白书p67-p69 整数的总和是一定的,所以一个人得分越高,另一个人的得分越低。 不管任意时刻游戏的状态都是原始序列的一段连续子序列,(因而可用区间dp) //#pragma warning (disable: 4786) //#pragma comment (linker, "/STACK:16777216") //HEAD #include #include #in

冰 1336
上一篇: SPOJ 345 Mixtures (区间DP&前缀数组)
下一篇: 《算法艺术与信息学竞赛》题目-提交方式对照表
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值