【华为面试题】动态规划

2023-11-03

题目

题目描述:
一个充电站有n个不同功率的充电设备。您的任务是从中选取若干个设备,使得他们的总功率最接近但不超过充电站的最大输出功率P_max。

输入:

第一行:一个整数n,代表充电设备的数量。
第二行:n个整数,分别代表每个设备的功率。
第三行:一个整数,代表充电站的最大输出功率P_max。
输出:

一个整数,代表选取的设备的总功率,该总功率应最接近但不超过P_max。

示例:

输入:
4
50 20 20 60
90

输出:
90

解释:
选取功率为50、20、20的设备,总功率为90,最接近但不超过充电站的最大输出功率。

代码

function getMaxPower(n, p, p_max) {
  // 初始化动态规划的二维数组,大小为 (n+1) x (p_max+1),所有元素初值为0
  let dp = Array(n + 1)
    .fill()
    .map(() => Array(p_max + 1).fill(0));

  // 初始化第0行,考虑使用第一个设备时的情况
  for (let j = p_max; j >= p[0]; j--) {
    dp[0][j] = dp[0][j - p[0]] + p[0];
  }

  // 对于每一个设备(从第二个到最后一个)
  for (let i = 1; i < n; i++) {
    // 对于每一个可能的总功率值
    for (let j = 0; j <= p_max; j++) {
      // 如果当前的功率j小于设备的功率,那么就不能加入这个设备
      if (j < p[i]) {
        dp[i][j] = dp[i - 1][j];
      } else {
        // 否则,考虑两种情况:加入当前设备或不加入。取两者的最大值。
        dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - p[i]] + p[i]);
      }
    }
  }

  // 返回dp数组的最后一行的最后一个元素,它表示使用所有设备并且总功率不超过p_max的最大总功率。
  return dp[n - 1][p_max];
}

// 示例1
let n1 = 4;
let p1 = [50, 20, 20, 60];
let p_max1 = 90;
console.log(getMaxPower(n1, p1, p_max1)); // 输出: 90

// 示例2
let n2 = 2;
let p2 = [50, 40];
let p_max2 = 30;
console.log(getMaxPower(n2, p2, p_max2)); //输出: 0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【华为面试题】动态规划 的相关文章

随机推荐

  • C++内存管理

    http blog csdn net zhanghefu article details 5003383 内存管理是C 最令人切齿痛恨的问题 也是C 最有争议的问题 C 高手从中获得了更好的性能 更大的自由 C 菜鸟的收获则是一遍一遍的检查
  • 深入理解AMBA总线——AXI原子访问机制和AXI响应

    本篇文章给大家讲解AXI协议的原子访问机制 1 Atomic访问机制 1 1 Atomic信号 众所周知 操作系统的很多机制需要底层硬件的支持 如并发 虚拟化等 随着多处理器的流行 arm也自然而然的要做其总线上加入和并发相关的信号 以满足
  • 【kubernetes系列】k8s ingress配置websocket支持

    背景 公司的后端同事在代码调试过程中需要上传一个文件 调用的websocket接口 了解同事需求和现象 浏览器上传文件一直卡主 通过浏览器调试模式发现无法正常获取websocket的连接 websocket的接口访问可以通过wscat命令
  • CTFHUB-Cookie注入

    Cookie Cookie 浏览器向服务器发送请求时发送cookie 或者服务器向浏览器附加cookie 就是将cookie附近在这里的 例如 Cookie user admin HackBar Load一下 BurpSuite等工具也可以
  • vuex固化插件的使用

    数据持久化 刷新页面 vuex里面数据丢失 清空 有时候我们需要把一些数据固话到本地 即使刷新也不能清空 第一步 需要先下载插件 npm install vuex persistedstate save 第二步 在 store index
  • linux配置SVN,添加用户,配置用户组的各个权限教程

    前言 今天组长要我给新员工添加svn 的权限 以及赋予他们权限访问指定的目录 于是就顺手写个教程吧 毕竟好记性不如烂笔头 一 xshell登陆服务器 用xshell登陆服务器 cd切换到服务器中svn的项目仓库目录中 然后切换到conf文件
  • java利用freemark和itext出pdf文件

    第一步导包
  • Navicat Premium

    一 简介 Navicat Premium 是一套数据库开发工具 让你从单一应用程序中同时连接 MySQL MariaDB SQL Server Oracle PostgreSQL 和 SQLite 数据库 它与 Amazon RDS Ama
  • 计算机基础汇总

    计算机基础汇总 时间复杂度 https blog csdn net qq 41523096 article details 82142747 数组与链表 https blog csdn net qq 25806863 article det
  • normalize.css在vue中使用

    css样式初始化 normalize在vue中使用 1 Normalize css只是一个很小的css文件 但它在磨人的HTML元素样式上提供了跨浏览器的高度一致性 相比于传统的CSS reset Normalize css是一种现代的 为
  • CUDA - 在CUDA C/C++中使用共享内存

    原文链接 Using Shared Memory in CUDA C C 文章目录 共享内存 线程同步 共享内存示例 静态共享内存 动态共享内存 共享内存bank冲突 配置共享内存数量 总结 在上一篇文章中 我研究了如何将一组线程的全局内存
  • F12复制返回的json

    第一步 打印返回的数据 然后打开控制台 第二步 在打印的res右键出现会出现Store as global variable 然后点击 出现temp 第三步 在控制台输入copy temp 第四步 这个时候已经复制好json了 直接粘贴到t
  • 计算除法java实现

    class Solution public double calcEquation List
  • ROS报错[joint_state_publisher_gui-1] process has died [pid 70747, exit code 1, cmd...

    1 报错 终端里运行 roslaunch mbot description display mbot launch 出现报错如下 joint state publisher gui 1 process has died pid 70747
  • 凹下去的白色按钮

    先看效果 再看代码
  • 关于分页的参数说明

    使用分页 如果Pageable是不是为null 此代码说明如果不为null PageHelper startPage currentPage pageSize true 第一个参数表示从第几页开始 第二个参数表示一页多少条记录 第三个参数表
  • Unity鼠标事件详解

    鼠标事件详解 1 3D物体 OnMouseDown 鼠标按下 OnMouseDrag 鼠标在按下时拖动 OnMouseUp 鼠标抬起 OnMouseEnter 鼠标进入 OnMouseExit 鼠标离开 OnMouseOver 鼠标经过 O
  • bert第三篇:tokenizer

    文章目录 tokenizer基本含义 bert里涉及的tokenizer BasicTokenzer wordpiecetokenizer FullTokenzier PretrainTokenizer 关系图 实操 如何训练 训练自己中文
  • Google Play的QUERY_ALL_PACKAGES或REQUEST_INSTALL_PACKAGES权限问题

    情况1 你的应用需要使用QUERY ALL PACKAGES权限 就按照Google Play政策要求上传这块功能视频了 情况2 应用不需权限 就把自己AndroidManifest xm中两个权限删除
  • 【华为面试题】动态规划

    题目 题目描述 一个充电站有n个不同功率的充电设备 您的任务是从中选取若干个设备 使得他们的总功率最接近但不超过充电站的最大输出功率P max 输入 第一行 一个整数n 代表充电设备的数量 第二行 n个整数 分别代表每个设备的功率 第三行