当前位置: 首页 > 编程笔记 >

C ++中的Stone Game III

沈飞跃
2023-03-14
本文向大家介绍C ++中的Stone Game III,包括了C ++中的Stone Game III的使用技巧和注意事项,需要的朋友参考一下

假设Amal和Bimal正在玩石头堆。一排有几块宝石,每块宝石都有一个关联的值,该值是在数组中指定的名为stoneValue的数字。

Amal和Bimal轮流使用,Amal首先开始。轮到每个玩家时,他/她可以从该行中剩余的第一块石头中拿出1、2或3块石头。

每个玩家的分数是所取石头的总和。最初的分数是0。游戏的目标是以最高分数结束,而获胜者是拥有最高分数的玩家,并且也可能有平局。游戏将一直进行到所有石头都被拿走为止。

我们将假定Amal和Bimal处于最佳状态。如果Amal获胜,我们必须返回“ Amal”,如果Bimal获胜,则必须返回“ Bimal”,如果他们以相同的分数结束游戏,则必须返回“ Tie”。

因此,如果输入值= [1,2,3,7],则输出将为Bimal,因为Amal始终会丢失。他最好的举动是拿下三堆,比分变成6。现在,比马尔的比分是7,比马尔取得了胜利。

为了解决这个问题,我们将遵循以下步骤-

  • 为了解决这个问题,我们将遵循以下步骤-

  • 定义大小为n + 10的数组dp

  • 定义大小为n + 10的数组和

  • 对于初始化i:= 0,当i <n时,更新(将i增加1),执行-

    • dp [i]:=-(1 ^ 9)

  • sum [n-1] = v [n-1]

  • 对于初始化i:= n-2,当i> = 0时,更新(将i减1),执行-

    • sum [i]:= sum [i +1] + v [i]

  • 对于初始化i:= n-1,当i> = 0时,更新(将i减1),-

    • dp [i]:= dp [i]和sum [i]的最大值-dp [k]

    • 对于初始化k:= i + 1,当k <= i + 3并且k <= n时,更新(将k增加1),-

  • 总计:=总和[0]

  • x:= dp [0]

  • y:=总计-x

  • 返回x> y为真,则为“ Amal”:如果x和y相同,则为“ Tie”,否则为“ Bimal”

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string stoneGameIII(vector<int>& v) {
      int n = v.size();
      vector <int> dp(n + 10);
      vector <int> sum(n + 10);
      for(int i = 0; i < n; i++)dp[i] = -1e9;
      sum[n - 1] = v[n - 1];
      for(int i = n - 2; i >= 0; i--)sum[i] = sum[i + 1] + v[i];
      for(int i = n- 1 ; i >= 0; i--){
         for(int k = i + 1; k <= i + 3 && k <= n; k++){
            dp[i] = max(dp[i], sum[i] - dp[k]);
         }
      }
      int total = sum[0];
      int x = dp[0];
      int y = total - x;
      return x > y? "Amal" : x == y ? "Tie" : "Bimal";
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,7};
   cout << (ob.stoneGameIII(v));
}

输入项

{1,2,3,7}

输出结果

Bimal
 类似资料:
  • 本文向大家介绍C / C ++中的memcpy(),包括了C / C ++中的memcpy()的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中函数的工作,语法和示例。 什么啊 memcpy()函数是C ++ STL中的内置函数,在<cstring>头文件中定义。函数用于复制内存块。此功能用于将值的数量从一个存储位置复制到另一个存储位置。 该函数的结果是数据的二进制副

  • 问题内容: 是C,C ++,Java或C#中的main()(或Main()),用户定义的函数还是内置函数? 问题答案: 这是用户定义的函数,对于程序执行来说是必需的。当您以编译语言运行程序时,该功能即为执行的功能。例如,在Java中,如果类中具有签名功能,则可以执行该类,因为JVM将执行该方法的内容。 Java范例: … … 结果将“ Hello World”打印到控制台。

  • 问题内容: 我一直在寻找一套在JSON和XML之间进行转换的例程,但毫无用处。我在Javascript,Java,PHP和Python中找到了这样的例程,但在C或C ++中却找不到。 FWIW,我的json库是json- spirit。我当前正在处理JSON,并希望通过转换层添加XML支持(将传入消息从XML转换为JSON,对其进行处理,将结果转换回XML,然后将其输出)。 有人有指针吗? 我还看

  • 本文向大家介绍C++中extern "C"的用法,包括了C++中extern "C"的用法的使用技巧和注意事项,需要的朋友参考一下 学习过C++的人都知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。另外,extern还可以与”C”连用,作为链接指示。本文就此进行实例说明如下:

  • 本文向大家介绍C和C ++中的循环,包括了C和C ++中的循环的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C和C ++中的循环。 当我们不得不一次又一次地执行给定的块代码时,使用编程中的循环。它采用了一次又一次编写同一代码行的方法,并促进了DRY代码实践。 示例 对于循环 输出结果 While循环 输出结果

  • 本文向大家介绍C / C ++中的mbsrtowcs()函数,包括了C / C ++中的mbsrtowcs()函数的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中std::mbsrtowcs()函数的工作,语法和示例。 什么是std::mbsrtowcs()? std::mbsrtowcs()函数是C ++ STL中的内置函数,在<cwchar>头文件中定义。表示将

  • 本文向大家介绍C / C ++中的putwchar()函数,包括了C / C ++中的putwchar()函数的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中putwchar()函数的工作,语法和示例。 什么是putwchar()? putwchar()函数是C ++ STL中的内置函数,在<cwchar>头文件中定义。putwchar()函数用于在标准输出设备上写

  • 本文向大家介绍C / C ++中的rand()和srand(),包括了C / C ++中的rand()和srand()的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL的工作,语法以及示例和函数。 什么啊 rand()函数是C ++ STL中的内置函数,在<cstdlib>头文件中定义。用于生成一系列随机数。当我们想在代码中生成随机数时,可以使用此函数。 就像我们在C