LeetCode-1799- N 次操作后的最大分数和

news2024/11/15 23:20:30

1、状态压缩+动态规划

我们可以使用动态规划来解决问题,我们利用数组 d p [ s ] dp[s] dp[s]来表示状态为s时,能够去到的最大分数。由于题目限定了n的范围,因此我们可以利用二进制数字s来压缩状态,我们利用长度为m的二进制数s的每一位来表示该位上的数字是否被删除,若为1则表示没被删除。

由此我们可以得到状态转移方程为: d p [ s ] = m a x { d p [ s ⊕ 2 i ⊕ 2 J ] + t s 2 × g c d ( n u m s [ i ] , n u m s [ j ] ) } i , j ∈ s & i < j dp[s]=max\left \{ dp[s\oplus 2^i\oplus 2^J]+\frac{t_s}{2}\times gcd(nums[i],nums[j]) \right \} i,j\in s \& i<j dp[s]=max{dp[s2i2J]+2ts×gcd(nums[i],nums[j])}i,js&i<j
其中为了方便计算任意两个数之间的最大公约数,我们可以使用二维数组 g c d t m p gcd_tmp gcdtmp来记录任意两个数之间的最大公约数。

class Solution {
public:
    int gcd(int a, int b) {
        if (a < b) swap(a, b);
        if (b == 0) return a;
        if (a % 2 == 0 && b % 2 == 0) return 2 * gcd(a / 2, b / 2);
        if (a % 2 == 0) return gcd(a / 2, b);
        if (b % 2 == 0) return gcd(a, b / 2);
        return gcd((a + b) / 2, (a - b) / 2);
    }

    int maxScore(vector<int> &nums) {
        int m = nums.size();
        vector<int> dp(1 << m, 0);
        vector<vector<int>> gcd_tmp(m, vector<int>(m, 0));
        for (int i = 0; i < m; ++i) {
            for (int j = i + 1; j < m; ++j) {
                gcd_tmp[i][j] = gcd(nums[i], nums[j]);
            }
        }
        int all = 1 << m;
        for (int s = 1; s < all; ++s) {
            int t = __builtin_popcount(s);
            if (t & 1) {//若s中1的个数为奇数则说明当前情况不成立跳出循环
                continue;
            }
            for (int i = 0; i < m; ++i) {
                if ((s >> i) & 1) {//判断此时第i为上是否为1,为1则继续
                    for (int j = i + 1; j < m; ++j) {
                        if ((s >> j) & 1) {
                            dp[s] = max(dp[s], dp[s ^ (1 << i) ^ (1 << j)] + t / 2 * gcd_tmp[i][j]);
                        }
                    }
                }
            }
        }
        return dp[all - 1];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Javascript | Popper | 如何下载popper.min.js 与 各类js资源

文章目录问题描述解决办法问题描述 作为一个JS生手只知道使用CDN在线引用或者使用下载好的本地JS文件。 比如popper.js官网显示如下图&#xff0c;没有任何的Download按钮&#xff0c;有部分其他类的JS官网也存在同样的情况。 虽然有提供CDN&#xff0c;但因为国内网络原因&am…

Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型&#xff0c;如&#xff1a;数组、字典等。 Lua table 使用关联型数组&#xff0c;你可以用任意类型的值来作数组的索引&#xff0c;但这个值不能是 nil。 Lua table 是不固定大小的&#xff0c;你可以根据自己需要…

什么是python,为什么要学习Python?

什么是python&#xff1f; 人工智能概念的兴起&#xff0c;使得Python的发展非常迅速&#xff0c;关注度也是越来越高。作为现在最热门的编程语言&#xff0c;Python简单优雅&#xff0c;用尽量少的代码写出最明白的程序&#xff0c;简单易学的特性使其拥有超高的人气&#xf…

VUE—跳转传参

目录 一、基本使用 二、$route和$router 三、路由跳转的两种方式 四、编程式导航 五、传参 六、props 一、基本使用 1、安装vue-router cnpm install --save vue-router3 如果大家用的是vue2&#xff0c;下载vue-router不设置版本好的话&#xff0c;可能会因为版本过高…

大数据Kudu(十一):ClickHouse与Kudu对比

文章目录 ClickHouse与Kudu对比 ClickHouse与Kudu对比 kudu 2015年9月28号出现第一个测试版本0.5.0,2016年2月26第一个正式版0.7.发布。clickhouse 2018年3月开源正式版出现。两者都是列式存储,都可以针对数据进行实时OLAP分析,两者的区别如下: 方面 Kudu

零基础小白如何做到5个月学成Python?学习规划在这里!

自学半个月没用不是正常的吗&#xff1f;一般来说&#xff0c;Python培训需要脱产学习5个月左右&#xff0c;这样的市场既能掌握工作所需的技能&#xff0c;还能够积累一定的项目经验。 当然&#xff0c;如果你想要在Python的路上越走越远&#xff0c;则需要不断的积累和学习&…

实验二 单隐层神经网络

一、实验目的 &#xff08;1&#xff09;学习并掌握常见的机器学习方法&#xff1b; &#xff08;2&#xff09;能够结合所学的python知识实现机器学习算法&#xff1b; &#xff08;3&#xff09;能够用所学的机器学习算法解决实际问题。 二、实验内容与要求 &#xff08…

我们是如何构建自己的可观测性的

引言 近日&#xff0c;关于云平台自身的可靠性问题又成为大家关注的焦点。系统一定会有故障&#xff0c;相信作为用户都能理解&#xff0c;但用户需要在故障发生后&#xff0c;能尽快知晓造成故障的根本原因和修复计划&#xff0c;以便有效调整受影响的业务来降低损失&#xf…

盘点2022年电视行业:科技与美学的战场三星缔造“生活方式”的全新价值

作者 | 曾响铃 文 | 响铃说 前不久&#xff0c;中国质量协会第十一次组织开展了本年度电视行业用户满意度监测&#xff0c;监测对象为市场占有率达90%以上的10个主流电视品牌&#xff0c;结果显示2022年电视行业用户满意度为83分&#xff0c;同比持平&#xff0c;处于较高水平…

【Ctfer训练计划】——(三)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

Linux系统安装Zookeeper教程

原文链接 在root账户下创建zookeeper安装目录&#xff1a; mkdir /home/zookeeper进入zookeeper目录&#xff1a; cd /home/zookeeper通过wget命令下载zookeeper安装包&#xff1a; wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0…

spring+jsp面向社区健康服务的医疗平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三章系统分析与设计 11 3…

WebDAV之葫芦儿·派盘+FX文件管理器

FX文件管理器 支持WebDAV方式连接葫芦儿派盘。 想要一款几乎强大到极致的文件/媒体管理器,同时支持手机、电脑文件共享?推荐您选择FX File Explorer,您就可以快速轻松地管理您手机或平板上的所有内容。 FX File Explorer是一个多功能的手机文件流量和管理工具。它的界面美…

拆解一个居家隔离监测的无线门磁

捡到了一个居家隔离监测的无线门磁&#xff0c;拆开来看看&#xff1a; 门磁整体照&#xff1a; 一套门磁分两部分&#xff0c;一个主机&#xff0c;一个磁铁&#xff1b; 可以看到&#xff0c;使用的是两节干电池供电&#xff0c;内置弹簧天线。 拆下来PCBA&#xff0c;可…

(二十)Vue之单文件组件

文章目录基本使用一、如何定义一个组件&#xff1f;二、如何注册组件&#xff1f;三、如何使用组件&#xff1f;演示程序普通Vue程序单文件组件程序局部注册全局注册几个注意点1.关于组件名2.关于组件标签3.一个简写方式组件的嵌套使用关于VueComponent一个重要的内置关系&…

行业唯一,Eolink 入选信通院“云上软件工程社区汽车云工作组”首批企业成员名单

导读&#xff1a;本月20日&#xff0c;由中国信息通信研究院主办的汽车云专场沙龙成功召开&#xff0c;会上信通院发布了业内首个《汽车行业软件研发效能成熟度模型标准》&#xff0c;并成立了“云上软件工程社区-汽车云工作组”&#xff0c;Eolink 作为 API 管理领域唯一企业入…

下载离线地图多种方式(osm,MapTileDownloader )

目录 效果图&#xff1a; 一 下载离线地图的二种方式 1.osm 的方式下载瓦片 2、下载MapTileDownloader 二 代码&#xff08;推荐使用osm方式&#xff09; 效果图&#xff1a; 一 下载离线地图的二种方式 1.osm 的方式下载瓦片 百度网盘分享链接&#xff1a;https://pan.…

平板雷达水位计如何安装?平板雷达水位计怎么用?

1、设备介绍 本产品是一款用于地表水液位监测的非接触式平面雷达水位计&#xff0c;基于精确测量的电磁波测距技术。传感器发射电磁波照射水面并接收其回波&#xff0c;由此获得水面至电磁波发射点的距离、距离变化率&#xff08;径向速度&#xff09;、方位、高度等信息。  …

如何在Odoo 16库存中配置批次和序列号

如果您是库存管理操作的新手&#xff0c;您必须熟悉几种识别号&#xff0c;以跟踪和识别从制造到交付过程中的产品。批次和序列号是制造商通过各种产品移动来识别产品的部件。人们常常误解这些是一些随机分配的数字&#xff0c;以便得到产品的总数。但是&#xff0c;当涉及到库…

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现 更新进展 2022年12月21日 12:20 发布问题一、二思路及问题一的python代码实现 2022年12月22日 15:00 发布问题二python实现的代码 更新完毕 相关链接 &…