鱼C论坛

 找回密码
 立即注册
查看: 1458|回复: 1

[技术交流] C++刷LeetCode(1478. 安排邮筒)【动态规划】

[复制链接]
发表于 2020-7-7 19:06:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

  4.  

  5. 示例 1:



  6. 输入:houses = [1,4,8,10,20], k = 3
  7. 输出:5
  8. 解释:将邮筒分别安放在位置 3, 9 和 20 处。
  9. 每个房子到最近邮筒的距离和为 |3-1| + |4-3| + |9-8| + |10-9| + |20-20| = 5 。
  10. 示例 2:



  11. 输入:houses = [2,3,5,12,18], k = 2
  12. 输出:9
  13. 解释:将邮筒分别安放在位置 3 和 14 处。
  14. 每个房子到最近邮筒距离和为 |2-3| + |3-3| + |5-3| + |12-14| + |18-14| = 9 。
  15. 示例 3:

  16. 输入:houses = [7,4,6,1], k = 1
  17. 输出:8
  18. 示例 4:

  19. 输入:houses = [3,6,14,10], k = 4
  20. 输出:0
  21.  

  22. 提示:

  23. n == houses.length
  24. 1 <= n&#160;<= 100
  25. 1 <= houses[i] <= 10^4
  26. 1 <= k <= n
  27. 数组&#160;houses&#160;中的整数互不相同。

  28. 来源:力扣(LeetCode)
  29. 链接:https://leetcode-cn.com/problems/allocate-mailboxes
  30. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码


  1. class Solution {
  2. public:
  3.     int minDistance(vector<int>& houses, int k) {
  4.         sort(houses.begin(),houses.end());//注意这一步
  5.         int len = houses.size();
  6.         vector<vector<int> >cost(len, vector<int>(len, 0));
  7.         for(int i = 0; i < len; i++){
  8.             for(int j = i + 1; j < len; j++){
  9.                 int mid = (i + j) / 2;//注意这里的写法
  10.                 for(int k = i; k <= j; k++){
  11.                     cost[i][j] += abs(houses[k]-houses[mid]);
  12.                 }
  13.             }
  14.         }
  15.         vector<vector<int> > dp(len, vector<int>(k + 1, INT_MAX));
  16.         for(int i = 0; i < len; i++){
  17.             dp[i][1] = cost[0][i];
  18.         }
  19.         for(int i = 0; i < len; i++){
  20.             for(int j = 2; j <= k; j++){
  21.                 for(int k = j - 1; k <= i; k++){
  22.                     dp[i][j] = min(dp[i][j], dp[k-1][j-1] + cost[k][i]);
  23.                 }
  24.             }
  25.         }
  26.         return dp[len-1][k];
  27.     }
  28. };
复制代码


参考链接:https://leetcode-cn.com/problems ... -tong-by-qi-yi-lin/

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-7 19:06:53 | 显示全部楼层
这道题需要之后再看一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表