【题目】 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分

本文主要是介绍【题目】 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 文件名:[作业]
  • 作者:〈漆黑〉
  • 描述:〈 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分。两个人采取的策略都是让自己的得分尽量高,并且两人都足够聪明,求A的得分减去B的得分后的结果。
    【输入格式】
    输入包含多组数据。每组数据的第一行为n(1<=n<=100),第二行为给定的整数序列。输入结束标志为n=0.
    【输出格式】
    对于每组数据,输出A和B都采取最优策略的情况下,A的得分减去B的得分后的结果。 〉
  • 创建时间:2019.7.17
/****************************
* 文件名:[作业]
* 作者:〈漆黑〉
* 描述:〈  有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分。两个人采取的策略都是让自己的得分尽量高,并且两人都足够聪明,求A的得分减去B的得分后的结果。
【输入格式】
输入包含多组数据。每组数据的第一行为n(1<=n<=100),第二行为给定的整数序列。输入结束标志为n=0.
【输出格式】
对于每组数据,输出A和B都采取最优策略的情况下,A的得分减去B的得分后的结果。  〉
* 创建时间:2019.7.17
****************************/
#include <iostream>
#include<stdio.h>
using namespace std;int main(){while (1) {int n,  A = 0, B = 0;//n个数,max_l左边最大子列和,max_r右边最大子列和,sum_l暂存左边和, sum_r暂存右边和, A,B存总和cout << "请输入有多少个整数(1-100):";cin >> n;if (n == 0) return 0;//退出标志int* x = new int[n];cout << "请输入给定整数序列:";for (int i = 0; i < n; i++) {cin >> x[i];}int i, j, k = 0, l = n - 1;for (int o = 0; o < n; o++) {int q = 0, w = n - 1, max_l = INT_MIN, max_r = INT_MIN, sum_l = 0, sum_r = 0 ;i = k;j = l;for (; i <= l; i++) {//从左边的最大子序列sum_l += x[i];if (max_l <= sum_l) {max_l = sum_l;q = i;//q为从左最大的下标}}for (; j >= k; j--) {//从右边的最大子序列sum_r += x[j];if (max_r <= sum_r) {max_r = sum_r;w = j;//w为从右最大的下标}}if (o % 2 == 0) {//A先取if (max_l >= max_r) {//左边大A += max_l;k = q + 1;//此时左边从q+1开始找子列}else {//右边大A += max_r;l = w - 1;//此时右边从w - 1开始找子列}}else {//B后取if (max_l >= max_r) {//左边大B += max_l;k = q + 1;//此时左边从q+1开始找子列}else {//右边大B += max_r;l = w - 1;//此时右边从w - 1开始找子列}}if (k > l) {cout << "A的得分减去B的得分后的结果:" << A - B << endl;break;}}}
}

在这里插入图片描述

这篇关于【题目】 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350424

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

XTU 1233 n个硬币连续m个正面个数(dp)

题面: Coins Problem Description: Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face o

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000