离散优化算法大作业——2021华为软件精英挑战赛初赛赛题
离散优化算法大作业报告问题描述我选择解决的问题是2021年华为软件精英挑战赛的初赛,这是一个虚拟机调度与迁移问题。
问题要点概括如下:
服务器:我们有一系列服务器可以选择,这些服务器的CPU核数、内存大小、硬件成本(购买成本)、每日能耗成本(运行成本)各不相同。此外,服务器采用NUMA架构,这意味着服务器的资源是平均分配在两个节点A和B上的。
虚拟机:虚拟机是分配给用户的,根据型号不同,每一台虚拟机需要分配一定的CPU核数和内存大小;虚拟机也分为单节点部署和双节点部署,单节点部署意味着虚拟机要部署在某一台服务器的A节点或B节点上;双节点部署也将CPU核数和内存大小平均分配在某一台服务器的两个节点上。
用户请求:每一天会接受一系列用户的请求(包括增加虚拟机和删除已有虚拟机),增加虚拟机要将虚拟机分配到已有的服务器或者新购买的服务器上,要确保容量足够;而删除虚拟机则是根据虚拟机编号将其删除,同时释放占据的空间。
可以进行的操作:有购买服务器,分配虚拟机和虚拟机迁移;购买服务器就是添置新的服务器,同时要花费硬件成本;分配虚拟机就是将用户的add请求分配到已有的或者新购买的服务器上;虚拟机迁 ...
leetcode 1187. 使数组严格递增
题目描述leetcode1187. 使数组严格递增
给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0)。
每一步「操作」中,你可以分别从 arr1 和 arr2 中各选出一个索引,分别为 i 和 j,0 <= i < arr1.length 和 0 <= j < arr2.length,然后进行赋值运算 arr1[i] = arr2[j]。
如果无法让 arr1 严格递增,请返回 -1。
示例 1:
输入:arr1 = [1,5,3,6,7], arr2 = [1,3,2,4]
输出:1
解释:用 2 来替换 5,之后 arr1 = [1, 2, 3, 6, 7]。
示例 2:
输入:arr1 = [1,5,3,6,7], arr2 = [4,3,1]
输出:2
解释:用 3 来替换 5,然后用 4 来替换 3,得到 arr1 = [1, 3, 4, 6, 7] ...
离散优化算法作业——基础算法
离散优化算法解题报告15. 三数之和思路for循环枚举第一个元素nums[i],并利用双指针在后面的元素中寻找nums[j]+nums[k]==-nums[i],在和更小时,增大nums[j],否则减小nums[k],要通过排序使nums有序,便于双指针移动。
排序的复杂度为O(NlogN),枚举+双指针复杂度为O(N^2)。
去重问题:枚举i时,相同的只枚举第一个;双指针过程中,每次记录和调整都直接跳过相同元素。
代码123456789101112131415161718192021222324252627282930313233//O(N)枚举第一个元素,O(N)双指针寻找二三元素,总体上是O(N^2)的//每次调整或记录,都要跳过相同元素以进行去重class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ans; sort(nums ...
leetcode 2594. 修车的最少时间
题目描述leetcode2594. 修车的最少时间
给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。
同时给你一个整数 cars ,表示总共需要修理的汽车数目。
请你返回修理所有汽车 最少 需要多少时间。
注意:所有机械工可以同时修理汽车。
示例 1:
输入:ranks = [4,2,3,1], cars = 10
输出:16
解释:
- 第一位机械工修 2 辆车,需要 4 * 2 * 2 = 16 分钟。
- 第二位机械工修 2 辆车,需要 2 * 2 * 2 = 8 分钟。
- 第三位机械工修 2 辆车,需要 3 * 2 * 2 = 12 分钟。
- 第四位机械工修 4 辆车,需要 1 * 4 * 4 = 16 分钟。
16 分钟是修理完所有车需要的最少时间。
示例 2:
输入:ranks = [5,1, ...
leetcode 6366. 在网格图中访问一个格子的最少时间
题目描述leetcode 6366. 在网格图中访问一个格子的最少时间
给你一个 m x n 的矩阵 grid ,每个元素都为 非负 整数,其中 grid[row][col] 表示可以访问格子 (row, col) 的 最早 时间。也就是说当你访问格子 (row, col) 时,最少已经经过的时间为 grid[row][col] 。
你从 最左上角 出发,出发时刻为 0 ,你必须一直移动到上下左右相邻四个格子中的 任意 一个格子(即不能停留在格子上)。每次移动都需要花费 1 单位时间。
请你返回 最早 到达右下角格子的时间,如果你无法到达右下角的格子,请你返回 -1 。
示例 1:
输入:grid = [[0,1,3,2],[5,1,2,5],[4,3,8,6]]
输出:7
解释:一条可行的路径为:
- 时刻 t = 0 ,我们在格子 (0,0) 。
- 时刻 ...
leetcode 1798. 你能构造出连续值的最大数目
题目描述leetcode1798. 你能构造出连续值的最大数目
给你一个长度为 n 的整数数组 coins ,它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币,它们的和为 x ,那么称,你可以 构造 出 x 。
请返回从 0 开始(包括 0 ),你最多能 构造 出多少个连续整数。
你可能有多个相同值的硬币。
示例 1:
输入:coins = [1,3]
输出:2
解释:你可以得到以下这些值:
- 0:什么都不取 []
- 1:取 [1]
从 0 开始,你可以构造出 2 个连续整数。
示例 2:
输入:coins = [1,1,1,4]
输出:8
解释:你可以得到以下这些值:
- 0:什么都不取 []
- 1:取 [1]
- 2:取 [1,1]
- 3:取 [1,1,1]
- 4:取 [4]
- 5:取 [4, ...
QQ机器人DDBOT
搭建QQ机器人DDBOT最近在水群的时候看到一个机器人,可以推送直播、动态通知,还有一些自定义命令。感觉挺好玩的,正好云服务器闲着也是闲着(目前只跑了网站和code-server,没什么压力),索性搭个机器人玩玩。
下载与安装DDBOT的github页面:Sora233/DDBOT: 一个基于MiraiGO的QQ群推送框架。这个机器人是拆包即用的,所以完全不懂代码也没事,releases如下图,下载与机器对应的最新版本即可,比如在windows上就下载DDBOT-v1.0.9.2-windows-amd64.zip,我是搭在阿里云的CentOS上,所以下载DDBOT-v1.0.9.2-linux-amd64.tar.gz,可以在本地下载然后拖到云服务器上去(需要vscode页面),也可以直接wget,不过由于github的屏蔽问题,为了加快下载速度,最好找一个镜像站,网上一搜就有。
下载完后得到一个.tar.gz文件,这是一个压缩包,通过tar -zxvf 文件解压,得到一个可执行文件DDBOT,将它放到一个单独的文件夹中,运行即可。
首次运行结果如下图:
进行扫码登录。不过如果是在 ...
运筹学I期末编程解题报告
期末编程报告第一次作业第6题
建模设x_{ij}为产品Q_i中原料P_j的含量,线性规划模型如下:
\small \begin{aligned}
max\ z=&2*(x_{11}+x_{12}+x_{13})+3*(x_{21}+x_{22}+x_{23})+2.3*(x_{31}+x_{32}+x_{33})\\
&-1.7*(x_{11}+x_{21}+x_{31})-1.5*(x_{12}+x_{22}+x_{32})-1.2*(x_{13}+x_{23}+x_{33})\\
=&0.3x_{11}+0.5x_{12}+0.8x_{13}+1.3x_{21}+1.5x_{22}+1.8x_{23}+0.6x_{31}+0.8x_{32}+1.1x_{33}
\end{aligned}
\small s.t.\begin{cases}
x_{11}+x_{21}+x_{31}\leq1500\\
x_{12}+x_{22}+x_{32}\leq1000\\
x_{13}+x_{23}+x_{33}\leq2000\\
x_{11}\geq0.15*(x_{11}+x_{12}+ ...
leetcode 2514. 统计同位异构字符串数目
题目描述leetcode 2514. 统计同位异构字符串数目
给你一个字符串 s ,它包含一个或者多个单词。单词之间用单个空格 ' ' 隔开。
如果字符串 t 中第 i 个单词是 s 中第 i 个单词的一个 排列 ,那么我们称字符串 t 是字符串 s 的同位异构字符串。
比方说,"acb dfe" 是 "abc def" 的同位异构字符串,但是 "def cab" 和 "adc bef" 不是。
请你返回 s 的同位异构字符串的数目,由于答案可能很大,请你将它对 109 + 7 取余 后返回。
示例 1:
输入:s = "too hot"
输出:18
解释:输入字符串的一些同位异构字符串为 "too hot" ,"oot hot" ,"oto toh" ,"too toh" 以及 "too oht" 。 ...
总算在2022年拿到了心心念念的蓝牌子
竞赛分数更新了,终于拿到了Guardian。🥳🥳🥳八月三日拿到了Knight,当时也发帖留念了——刷题四月,用Knight为我的大一画上句号,那时觉得Guardian还很遥远,没想到一个学期过去,终于在2023年到来之前拿到了蓝牌子。
这五个月里有什么进步呢?
在算法上,主要就是系统地学习了一遍数据结构与算法。之前是遇到一道题不会,就去学那种算法,效率终究是比较低,而且没有形成完整的知识框架。这学期跟着老师学数据结构,从线性表、栈、队列学到树、图,有了比较完整的认识,在学习的过程中也把一些总结放到我的个人博客上。同时,也学到了很多新的算法,比如KMP算法、最小生成树、最短路、各种排序、并查集、贪心……这些稍难一点的算法可能就是Knight与Guardian之间的一些区别。当然,题量还是最关键的,拿到Knight时我通过了316题,而今天,已经有692题了,量变达到质变果真不假。
下学期好像就没有算法课了,希望还会坚持做下去leetcode。大家一起加油↖(^ω^)↗