首页 > 其他分享 >亚历克斯的无聊游戏 | 动态规划

亚历克斯的无聊游戏 | 动态规划

时间:2024-11-18 11:44:53浏览次数:3  
标签:map 游戏 无聊 整数 亚历克斯 num maxn 测试用例 include

描述

亚历克斯不喜欢无聊。这就是为什么每当他感到无聊时,他都会想出一些游戏。一个漫长的冬夜,他想出了一个游戏。

给定由n个整数组成的序列a。玩家可以选择其中的整数。在一个步骤中,他可以选择序列中的一个元素(让我们把它表示为a[k]),然后删除它,此时a中所有值等于a[k]+ 1和a[k]- 1的元素也必须从序列中删除。这一步为玩家带来a[k]分数。

亚历克斯应该怎样选择,才能在游戏中得到的分数最多?

输入

输入一个t表示t个测试用例。

对于每个测试用例,输入一个整数n表示a中有n个整数。

接下来输入n个整数

输出

对于每个测试用例,输出一个整数表示可以得到的多分数。末行有换行

样例解析,有一个测试用例,包含7个整数的序列,选择3 5 7, 删除所有2,4,得到:

3×2+5+7=18

输入样例 1 

1
7
5 3 4 2 3 7 2

输出样例 1

18

题解:

        使用动态规划,map的作用是记录出现过的数以及出现的次数。DP[i]的意思是从0到i中,在数组中出现过的数能到达的最大的分数。

        状态转移方程:

DP[i]=max(DP[i-1],DP[i-2]+map[i]*i)

        解释以下就是,要不选择前两个的最值加上自己,要不就不加自己之后的最大值。并且DP必须每个数都遍历过去,因为map只记录数值不记录数与数之间的关系。

代码:

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>
#include <functional>
using namespace std;
typedef long long int ll;

int t=0,n=0,i=0,j=0,num=0,maxn=0;
map<int ,int > mp;
map<int ,int >::iterator it;
ll dp[10001]={0};

main(){
    cin >> t;
    while(t>0){
        mp.clear();
        cin >> n;
        maxn=0;
        for(i=0;i<n;i++){
            cin >> num;
            if(num>maxn){
                maxn=num;
            }
            mp[num]++;
        }
        dp[0]=0;
        //cout << dp[0] << "\n";
        dp[1]=mp[1];
        //cout << dp[1] << "\n";
        for(i=2;i<=maxn;i++){
            dp[i]=max(dp[i-1],dp[i-2]+mp[i]*i);
        }
        cout << dp[maxn] << "\n";
        t--;
    }
}

标签:map,游戏,无聊,整数,亚历克斯,num,maxn,测试用例,include
From: https://blog.csdn.net/2301_78848414/article/details/143851413

相关文章

  • 像素风游戏:死亡细胞Dead Cells中文激活版
    《死亡细胞》(DeadCells)是一款融合了类银河战士恶魔城元素的横版动作Roguelike游戏。玩家在游戏中扮演一个无名的死者灵魂,操控复活的躯体探索变化莫测的岛屿。游戏以其独特的像素风格、流畅的战斗系统、随机生成的地图和敌人配置而著称,玩家需不断收集细胞解锁新能力和装备,挑战强......
  • xdoj261 猜数字游戏
    题目:猜数字游戏问题描述 猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Toobig”),还是小了(“Toosmall”),相等表示猜到了。 如果猜到,则结束程序。 程序还要求统计猜的......
  • c++小游戏5个
    这里给出5个简单的C++小游戏示例:猜数字游戏:计算机生成一个随机数,玩家需要猜出这个数字是多少。提示玩家猜测的数字是高了还是低了,直到猜中为止。#include<iostream>#include<cstdlib>#include<ctime>intmain(){srand(time(0));intsecretNumber=r......
  • 在黑色画布里移动白色小方块,小游戏
    importsysimportpygameWIDTH=800HEIGHT=600SIZE=WIDTH,HEIGHTpygame.init()screen=pygame.display.set_mode(SIZE)classPlayer: def__init__(self): self.surf=pygame.Surface((50,50)) self.surf.fill("white") self.rect=self.surf.get_rec......
  • gym游戏_单腿翻滚的reward简略函数的设置
    相关:https://openai.com/index/learning-from-human-preferences/google的researcher人为设定了一个rewardfunction,具体形式如下:defreward_fn(a,ob):backroll=-ob[7]height=ob[0]vel_act=a[0]*ob[8]+a[1]*ob[9]+a[2]*ob[10]backslide......
  • 超多行的游戏
    代码(运用到小猴编程编辑器的头文件:<xiaohoucode.h>):#include<bits/stdc++.h>autostart=std::chrono::high_resolution_clock::now();#include<xiaohoucode.h>#include<ctype.h>#include<termio.h>usingnamespacestd;structpai{intpaifu;......
  • 自制C++游戏头文件:C++自己的游戏头文件!!!(后续会更新)
    引言在这个数字时代,计算机游戏已经成为人们生活中不可或缺的一部分。它们不仅为我们带来了无尽的乐趣,还激发了我们的创造力和解决问题的能力。今天,我们将深入探讨一个特别的头文件——CPPgame.h,它包含了多个结构体和函数,用于实现多种精彩的游戏体验。无论你是游戏开发者还是游......
  • ssm毕设主机游戏商城系统的设计与实现程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、主机游戏商城系统设计与实现的相关阐述(一)研究背景随着科技的不断发展,主机游戏产业蓬勃发展,吸引了众多游戏爱好者。主机游戏凭借其高质量的画面、独特的......
  • PinBall击球游戏
    packagecom.shrimpking.t9;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;/***CreatedbyIntelliJIDEA.**@Auth......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。通过管理系统在电脑上的应用,人们能更好的管理信息,储存数据。为了能够提供游戏商城的方便性,开发了基于vue的游戏网站。此游戏网站......