首页 > 其他分享 >在传球游戏中最大化函数值

在传球游戏中最大化函数值

时间:2023-08-28 16:33:05浏览次数:36  
标签:最大化 传球 游戏 int res pos long 玩家 ++

给你一个长度为 n 下标从 0 开始的整数数组 receiver 和一个整数 k
总共有 n 名玩家,玩家 编号 互不相同,且为 [0, n - 1] 中的整数。
你需要从 n 名玩家中选择一名玩家作为游戏开始时唯一手中有球的玩家,球会被传 恰好 k 次
定义函数 f(x) 表示从编号为 x 的玩家开始,k 次传球内所有接触过球玩家的编号之和
选择开始玩家x ,目的是最大化 f(x)

1. 倍增优化

由于k值过大,这里需要使用倍增优化进行查询

class Solution {
public:
    long long getMaxFunctionValue(vector<int>& a, long long k) {
        int n = a.size();
        int f[n][36]; //f[i][j]表示从i位置跳2的j次方,能到达的位置
        long long w[n][36]; //记录从i位置开始,传送2的j次方的累计权值
        for(int i = 0; i < n; ++i) {
            f[i][0] = a[i];
            w[i][0] = i;
        }
        for(int j = 1; j < 36; ++j) { //一层一层的倍增
            for(int i = 0; i < n; ++i) {//遍历一趟
                f[i][j] = f[f[i][j-1]][j-1]; //连续跳两次
                w[i][j] = w[i][j-1] + w[f[i][j-1]][j-1]; //跳两趟的累计权值
            }
        }
        long long res = 0;
        for(int i = 0; i < n; ++i) {//枚举每个位置作为起点
            long long cur = 0;
            int pos = i;
            for(int j = 0; j < 36; ++j) {//将k拆分,进行对数时间复杂度查询
                if((k >> j) & 1) {
                    cur += w[pos][j];
                    pos = f[pos][j];
                }
            }
            res = max(res, cur + pos);
        }
        return res;
    }
};

标签:最大化,传球,游戏,int,res,pos,long,玩家,++
From: https://www.cnblogs.com/929code/p/17662696.html

相关文章

  • lua如何在游戏中保存上一次游戏状态
    一般在小型单机游戏中会有保存上次玩家的游戏状态,那么该怎么做呢,一般方法会想到利用文件保存。在lua开发中,都以lua文件来配置游戏数据,所以,我们在保存游戏状态的时候,我们也用lua文件作为保存文件。大概流程如下functiongame:load() localf=dofile(filePath)--生成一张表lua......
  • 解决方案构架部署 游戏云解决方案
    游戏云解决方案-麦云网络https://www.bgp.top/solutions/game.html登录服务器逻辑服务器中心服务器全局服务器全局数据库    翻译搜索复制......
  • NC20909 游戏
    题目链接题目题目描述有n个人围成一个环玩传球游戏,每轮游戏手里拿着球的那个人必须将球传给他(她)的一个朋友。游戏一共进行了m轮,初始球在第a个人手中,问游戏结束后球在第b个人手中的方案数。多组测试数据。答案对10^9+7取模。输入描述第一行三个整数Q,n,m(1≤Q≤1......
  • 基于JavaWeb的游戏信息管理系统设计与实现-计算机毕业设计源码
    摘要随着信息技术的发展,基于web模式的管理系统逐渐普及,网上查找信息是目前广受欢迎的模式。基于JavaWeb的游戏信息管理系统可以适应现代化快节奏的游戏方式,满足各类人群足不出户的在线查找游戏,利用基于JavaWeb的游戏信息管理系统可以获取游戏的排名信息,并可以记录个人的游戏数据,......
  • 【Land of Lisp】一次练习:巫师文本冒险游戏
    绪论CommonLisp是一门多范式语言,支持多种编程模式,包括面向对象编程、函数式编程。但CommonLisp鼓励函数式编程,并且包含有许多函数式编程相关的功能。《LandofLisp》是一本寓教于乐的学习Lisp语法的书籍。这本书配以漫画插图来进行表达,并且将小游戏的制作作为演示和练习实例......
  • Java猜拳小游戏
    以下代码是一个猜拳小游戏的实现,其中包含了用户输入、随机数生成、逻辑判断和输出结果等功能。首先让用户输入名字,然后每轮循环中用户输入出拳手势,根据输入的数字1、2、3分别代表石头、剪刀、布;同时,系统也会产生一个随机数表示电脑出拳手势。判断用户和电脑的胜负关系,并输出结果。......
  • 黑魂239 呼叫游戏物件
    首先在状态机里新建一个lock的布尔值和lock的状态。  改完之后还得把转态时间改成0。 然后下一步我们要测这个lock和导演模块的自定义导轨的关联,先在脚本ActorManager里新建一个函数。 然后在playablebehaviour里修改成这样。 最后是这样,可以从导演模块里找到是哪......
  • 21.2048小游戏
    跟着教学视频来做,但是视频不完整的,还缺一部分,后面的是我自己独自完成的,嘿嘿嘿这是初步的作品,也就三百多行代码packagemyGame2048;publicclassStartGame_2048{publicstaticvoidmain(String[]args){newGameFrame_2048();}}packagemyGame2048;......
  • 【秘籍揭秘】如何高速下载游戏、Switch资源?省时省力一网打尽!
    百度云盘SVIP合租啦亲爱的考研党和游戏玩家们,我今天要分享的是一份独家秘籍!......
  • 欢乐动物世界打怪游戏app软件
      游戏大部分人都玩过,各种类型的游戏层出不穷,其中打怪的游戏更受欢迎,众多的打怪游戏欢乐动物世界与其他的游戏不同,该游戏的画面和打斗的创新吸引了不少的玩家参与进来。  欢乐动物世界打怪游戏app软件的游戏背景设定在一个充满欢乐和生机的动物世界中,玩家可以扮演不同的动......