当前位置:首页 » 操作系统 » 算法石子

算法石子

发布时间: 2023-02-23 07:19:23

算法训练 石子游戏 python

算法训练 石子 游戏

问题描述

石子 游戏 的规则如下:

地上有n堆石子,每次操作可选取两堆石子(石子个数分别为x和y)并将它们合并,操作的得分记为(x+1) (y+1),对地上的石子堆进行操作直到只剩下一堆石子时停止 游戏 。

请问在整个 游戏 过程中操作的总得分的最大值是多少?

输入格式

输入数据的第一行为整数n,表示地上的石子堆数;第二行至第n+1行是每堆石子的个数。

输出格式

程序输出一行,为 游戏 总得分的最大值。

样例输入

10

5105

19400

27309

19892

27814

25129

19272

12517

25419

4053

样例输出

15212676150

数据规模和约定

1 n 1000,1 一堆中石子数 50000

思路:

运用贪心算法思想,每次都取石子数量最多和第二多的两堆石子进行合并操作(进行排序操作后取前两个数),即可得到每次操作的得分为最大,最后再将每次的操作得分最大值相加求和即可得到整个 游戏 过程中操作的总得分的最大值。

代码:

欢迎大家采纳和指正!

更多内容请持续关注该账号或CSDN的 RuthlessL!

❷ 数学(取石子游戏)

每次取的数量有没有限制啊?如果没有限制,第一步取哪一堆都没有关系,只要把它全部取走,然后,无论乙取哪一堆,甲也取哪一堆,而且,让这一堆只剩下一颗;如果乙已经取到只剩下一颗了,甲就取其他的,并且取到只剩下一颗;如果乙将一堆全部取走,甲也将另一堆全部取走.甲只要记得:保留偶数堆和做到每堆只剩一颗,有了这样的策略,最后结果就会出现偶数堆,而且每堆只剩一颗,轮到乙取,最后一颗就一定是甲得的.

❸ 石子重量折方量的算法

石子的堆积密度不一,一般是1.5吨/方左右。
重量(吨)÷1.5=体积(方)

❹ 石子合并问题C语言求优秀算法

用动态规划
注意:石子合并问题和最优二叉树是不同的。
我们先考虑求最大分值。
用a数组存放原来N堆石子的初始数量,下标从0开始。
每一次合并是对现在的某两堆相邻石子的,而这相当于将初始时的的若干堆石子合并。
用b[i,j]表示将从初始的第j堆石子开始,循环向后共i堆石子合并的最大分值。 (第N-1堆石子后面是第0堆)
假设最后一次是前k堆合并成的一堆和剩下的i-k堆石子合并成的一堆进行合并。所以总分值就是:这两堆各自合并的总得分 加上 最后一次全部合并的得分。
状态转移方程 b[i,j]=max{ b[k,j]+b[i-k,(j+k) mod N] | k=1..i-1 } + a[j] +…+ a[(j+i-1) mod N] b[1,i]=0, i=0..n-1
最后,解就是b[N,0]到b[N,N-1]中的最大值。

❺ 石子合并问题C语言求优秀算法

先将石头求和再除2得m,求<=m得那一堆石头,再用背包法(动态规划思想,高效)或直接回朔搜索(20较小,也会轻松搞定)。
一般动态规划相比搜索写代码要简单多,但背包那问题涉及到内存的申请和释放等指针问题就有点列外啦,呵呵,小弟也没写,简单指导下。抛砖引玉。。。。。

❻ 30个石子分成7份,每份都是单数,怎么分

30为基数,分7份,每份为单数,30以内单数为15个。其中最小的7个单数是
1
3
5
7
9
11
13
和为49!

热点内容
怎么电脑密码 发布:2025-08-10 23:03:53 浏览:738
虚拟机下安装linux 发布:2025-08-10 23:02:21 浏览:761
有哪些配置好车 发布:2025-08-10 22:57:19 浏览:905
我的世界冷小坏服务器 发布:2025-08-10 22:51:59 浏览:956
windows下编译php扩展 发布:2025-08-10 22:43:53 浏览:726
链表反转c语言 发布:2025-08-10 22:43:40 浏览:285
c语言求两数之和 发布:2025-08-10 22:37:08 浏览:774
phptype 发布:2025-08-10 22:29:23 浏览:902
ios和android区别 发布:2025-08-10 22:24:00 浏览:832
安卓host是什么意思 发布:2025-08-10 22:23:09 浏览:457