当前位置: 首页 > news >正文

算法题:安排邮筒

题目

给你一个房屋数组houses 和一个整数 k ,其中 houses[i] 是第 i 栋房子在一条街上的位置,现需要在这条街上安排 k 个邮筒。

请你返回每栋房子与离它最近的邮筒之间的距离的 最小 总和。

答案保证在 32 位有符号整数范围以内。

解题思路

深度优先搜索

class Solution {// cost[i][j]表示在区域[i, j]中安排一个邮筒到该区域其他房子的距离之和的最小值int[][] cost;int n;public int minDistance(int[] houses, int m) {Arrays.sort(houses);n = houses.length;//计算i,j范围内,只安排一个邮筒的最小距离和cost = new int[n][n];for(int i = 0; i < n; i++){for(int j = i; j < n; j++){for(int k = i; k <= j; k++){cost[i][j] += Math.abs(houses[k] - houses[i+(j-i+1)/2]);}}}return helper(0, 0, m, new Integer[n+1][m+1]);}// [i, n)是待划分的区域,j表示当前第几个划分public int helper(int i, int j, int m, Integer[][] memo){if(memo[i][j] != null)return memo[i][j];// 划分结束且最后一组不为空,直接返回最后一组区域[i, n)要花费的代价if(j + 1 == m && i < n)return cost[i][n-1];int min = Integer.MAX_VALUE / 2;// 穷尽所有的划分点for(int k = i; k < n; k++){// [i, k]是当前划分,[k+1, n)是后面的划分min = Math.min(min, cost[i][k] + helper(k+1, j+1, m, memo));}// 记忆return memo[i][j] = min;}
}

动态规划

下面的解题思路,刚开始学习的时候一直不理解,别人是怎么想到的,但是当自己尝试用DFS去做这个题,想到了上面的DFS大致代码时,瞬间理解了下面的动态规划思路

class Solution {public int minDistance(int[] houses, int k) {int n = houses.length;Arrays.sort(houses);//i,j两点之前安排一个邮筒的最小距离之和//奇数个点:在中间的点安排邮筒//偶数个点:在最中间的两个点的正中间安排一个邮筒int[][] medsum = new int[n][n];for (int i = n - 2; i >= 0; --i) {for (int j = i + 1; j < n; ++j) {//i-n点只安排一个邮筒时距离之和计算策略medsum[i][j] = medsum[i + 1][j - 1] + houses[j] - houses[i];}}int[][] f = new int[n][k + 1];for (int i = 0; i < n; ++i) {Arrays.fill(f[i], Integer.MAX_VALUE / 2);}for (int i = 0; i < n; ++i) {//0-i点只安排一个邮筒f[i][1] = medsum[0][i];for (int j = 2; j <= k && j <= i + 1; ++j) {//计算0-i之间的距离:分别计算0-i0安排j-1个邮筒,i0-i安排一个邮筒时的最小距离之和,这里没有将0-i之间的距离分成分别计算0-i0安排z个邮筒,i0-i安排j-z邮筒,0<=z<=jfor (int i0 = 0; i0 < i; ++i0) {f[i][j] = Math.min(f[i][j], f[i0][j - 1] + medsum[i0 + 1][i]);}}}return f[n - 1][k];}
}

http://www.dtcms.com/a/529405.html

相关文章:

  • jdk动态代理实现
  • 响应式网站一般怎么设计网站主要盈利模式
  • 【C++】C++ 中的 map
  • 4. Qt 元对象系统 属性系统
  • 阿里云 有企业 网站吗做网站找云无限
  • 策划网站建设价格三水 网站建设
  • C++容器array
  • 智能仓储物流6大系统OMS、WES、WMS、WCS、AGV、数字孪生技术,到底都管什么?
  • 徐州专门做网站百度指数怎么用
  • 多目标优化领域前沿创新亮点
  • 长春网站推广南宁建设学院官网
  • 上海企业建站费用空白网站建设
  • Java—枚举类
  • 【NestJS】深入理解NestJS装饰器原理
  • 网站设计师接单网站建设的大概费用
  • 俐侎族网站建设背景wordpress自动修改图
  • 西双版纳网站建设公司国内最大的域名交易平台
  • 湘潭市建设工程质量监督站网站微信推广朋友圈广告
  • 企业网站网址化工企业网站模板 aspx
  • 知识图谱构建流程与技术架构
  • 重庆手机网站制作wordpress 4.2.8
  • 16 Electron 应用自动更新方案:electron-updater 完整指南
  • 手机网站页面如何制作软件商贸有限公司企业简介
  • 重庆长寿网站设计公司哪家好做酒店管理网站的作用
  • 【系统分析师】高分论文:论需求分析及其应用(配网运维管控项目)
  • 大专计算机技术专业就业方向:解读、规划与提升指南
  • 如何在手机上做网站用dreamware制作网页
  • C# 可空类型
  • 数据结构12:二叉树的API及其实现
  • 用c 建网站时怎么做导航菜单栏访问升级每天自动更新