取数游戏

N(2 <=N<=200,且为偶数)个正整数的序列放在一个游戏平台上,A、B两人轮流从序列的两端取数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜(A先取,得分相同算A胜)。试求:

如何取数,才能使得A与B的得分差距最大?

(提示:A、B双方都在想方设法取胜)

{

不是贪心不是模拟

想获胜不是从两端取最大的

f[i,j]表示在区间i,j先取数的人所能得到的最大得分

初始值f[i,i]:=ai;

从取第I个和区第J个中比较最大的

差值最大——一个人得分最高!

}

var
     a:array[0..100] of longint;
     f:array[0..100,0..100] of longint;
     sum:array[0..100] of longint;
     i,n,j,p:longint;
function min     (x,y:longint):longint;
begin
  if x<y then exit(x) else exit(y);
end;
begin
  read(n);
  for i:=1 to n do read(a[i]);
  for i:=1 to n do f[i,i]:=a[i];
  for i:=1 to n do
   for j:=1 to i do
    sum[i]:=sum[i]+a[j];
  for i:=1 to n-1 do
   for j:=1 to n-i do
    begin
     p:=i+j;
     f[j,p]:=sum[p]-sum[j-1]-min(f[j+1,p],f[j,p-1]);
end;
writeln(f[1,n],‘ ‘,sum[n]-f[1,n])  end.  
时间: 2024-10-07 01:48:49

取数游戏的相关文章

BZOJ 1978: [BeiJing2010]取数游戏 game( dp )

dp(x)表示前x个的最大值,  Max(x)表示含有因数x的dp最大值. 然后对第x个数a[x], 分解质因数然后dp(x) = max{Max(t)} + 1, t是x的因数且t>=L ----------------------------------------------------------------------------------------- #include<cstdio> #include<cmath> #include<cstring>

[CH Round #61] 取数游戏

描述 SJY和CYF在玩一个取数游戏.他们将1~n分别写在n张纸上,随机排成一排,约定SJY先取,只能取走最边上的两张纸之一,然后CYF取:以此循环下去,取到1的人获胜.假设SJY和CYF足够聪明,求SJY获胜的概率. 输入 一个整数n 输出 SJY获胜的概率,保留最简分数形式(若为1,则输出1/1:若为0,则输出0/1). 样例 样例输入1 2 样例输出1 1/1 样例输入2 3 样例输出2 2/3 数据范围与约定 40%的数据,0<n≤7. 70%的数据,0<n≤1000. 100%的数据

【贪心】取数游戏

问题 N: [贪心]取数游戏 时间限制: 1 Sec  内存限制: 64 MB提交: 51  解决: 31[提交][状态][讨论版] 题目描述 给出2n(n≤100)个自然数(小于等于30000).将这2n个自然数排成一列,游戏双方A和B从中取数,只允许从两端取数.A先取,然后双方轮流取数.取完时,谁取得数字总和最大为取胜方:若双方和相等,属B胜.试问A方是否有必胜策略? 输入 共2行,第1行一个整数n:第2行有2*n个自然数. 输出 只有1行,若A有必胜策略,则输出“YES”,否则输出“NO”

矩阵取数游戏

题目描述 Description [问题描述]帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下:1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素:2. 每次取走的各个元素只能是该元素所在行的行首或行尾:3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分= 被取走的元素值*2i,其中i 表示第i 次取数(从1 开始编号):4. 游戏结束总得分为m次取数得分之和.帅帅想请你帮忙写一个程序,对于任意矩

P1005矩阵取数游戏

题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输

NOIP2007 矩阵取数游戏

题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. 每次取走的各个元素只能是该元素所在行的行首或行尾: 3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分= 被取走的元素值*2i, 其中i 表示第i 次取数(从1 开始编号): 4. 游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个

BZOJ 1978 取数游戏(DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1978 题意:给出一个数列a,在其中找出下标依次增大的数,使得任意相邻的两个数的最大公约数大于等于m.找出最多的数字. 思路:f[i]表示前面的数字中最大公约数为i可以找出的最多的数字个数.那么对于当前数字x: 接着更新f: int f[N],a[N]; int n,m; int main() { RD(n,m); int i; FOR1(i,n) RD(a[i]); int j,k;

矩阵取数游戏洛谷p1005

题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输

BZOJ1978: [BeiJing2010]取数游戏 game

1978: [BeiJing2010]取数游戏 game Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 650  Solved: 400[Submit][Status] Description 小 C 刚学了辗转相除法,正不亦乐乎,这小 P 又出来捣乱,给小 C 留了个 难题. 给 N 个数,用 a1,a2…an来表示.现在小 P 让小 C 依次取数,第一个数可以 随意取.假使目前取得 aj,下一个数取ak(k>j),则ak必须满足gcd(aj,a

洛谷 P1005 矩阵取数游戏 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元