文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个大小为 m x n 的整数矩阵 mat 和一个整数 target 。

从矩阵的 每一行 中选择一个整数,你的目标是 最小化 所有选中元素之 与目标值 target 的 绝对差

返回 最小的绝对差

a 和 b 两数字的 绝对差 是 a - b 的绝对值。

示例 1:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], target = 13
输出:0
解释:一种可能的最优选择方案是:
- 第一行选出 1
- 第二行选出 5
- 第三行选出 7
所选元素的和是 13 ,等于目标值,所以绝对差是 0 。

示例 2:

输入:mat = [[1],[2],[3]], target = 100
输出:94
解释:唯一一种选择方案是:
- 第一行选出 1
- 第二行选出 2
- 第三行选出 3
所选元素的和是 6 ,绝对差是 94 。

示例 3:

输入:mat = [[1,2,9,8,7]], target = 6
输出:1
解释:最优的选择方案是选出第一行的 7 。
绝对差是 1 。提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 70
1 <= mat[i][j] <= 70
1 <= target <= 800

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimize-the-difference-between-target-and-chosen-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution {public:int minimizeTheDifference(vector<vector<int>>& mat, int target) {int m = mat.size(), n = mat[0].size(), diff = INT_MAX, limit = 4901;vector<int> dp(limit, 0);for(int i = 0; i < n; ++i)dp[mat[0][i]] = 1; // 可以拿 标记为1for(int i = 1; i < m; ++i){vector<int> temp(limit, 0);for(int v = limit-1; v >= 0; --v){if(dp[v] == 0) // 前面状态不存在continue;for(int j = 0; j < n; ++j){if(v+mat[i][j] < limit)temp[v+mat[i][j]] = 1;}}swap(temp, dp);}for(int i = 0; i < limit; ++i){if(dp[i]){diff = min(diff, abs(i-target));}}return diff;}
};

1732 ms 68.5 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1981. 最小化目标值与所选元素的差(DP)相关推荐

  1. LeetCode 1058. 最小化舍入误差以满足目标(排序+贪心)

    文章目录 1. 题目 2. 解题 1. 题目 给定一系列价格 [p1,p2-,pn] 和一个目标 target,将每个价格 pi 舍入为 Roundi(pi) 以使得舍入数组 [Round1(p1), ...

  2. LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., st ...

  3. leetcode/加减的目标值,给数组元素添加+或-号组成的表达式值=target的方案数

    代码 package com.xcrj;import java.util.Arrays;/*** 剑指 Offer II 102. 加减的目标值* 给定一个正整数数组 nums 和一个整数 targe ...

  4. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...

  5. LeetCode 2035. 将数组分成两个数组并最小化数组和的差

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个 ...

  6. LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...

  7. LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums 和一个目标值 goal . 你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal . 也就是说,如果子序列元 ...

  8. 轻量级流程图控件GoJS示例连载(一):最小化

    GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和 HTML5 Canvas程序中创建流程图,且极大地简化你的JavaScript / Canvas 程序. 小编为大 ...

  9. CentOS6.5最小化安装+自定义安装包

    本文出自 "老男孩linux培训" 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1564620 (1)系统安装类型选择及自定义额 ...

最新文章

  1. 内存、性能问题分析的利器——valgraind
  2. char [] 和 char * 区别
  3. 年前最后一项技能树 Rust ,攻碉堡 ing (Bilibili 视频整理)
  4. 转: ashx中使用Session
  5. wxWidgets:库LIB清单
  6. sql update 多个字段_SQL学习之路-20190707
  7. 64ubuntu编译32位程序
  8. ASP.NET 自定义控件从入门到精通3补充
  9. Flutter实战视频-移动电商-18.首页_火爆专区后台接口调试
  10. 一千行代码铸造Terminal文本编辑器
  11. 卫星星历TLE格式说明
  12. [Qt] 基于Tcp协议的聊天室实现(Chat Room 局域网通信)
  13. Jenkins - Publish Over SSH
  14. 陈小龙linux及服务器正文 配置rewrite
  15. Google Earth Engine(GEE)计算热度(LST)
  16. python自动发送邮件不需要发件邮箱_python 自动发送邮件
  17. 在Ubuntu 16.04中安装FBReader阅读器,阅读mobi文件
  18. 使用metasploit破解ssh密码
  19. python爬虫天猫商品数据及分析(2)
  20. Mysql错误: Incorrect string value: '\xEF\xBF\xBD\xEF\xBF\xBD...' for column 'sql_info' at row 72

热门文章

  1. 前端之 JavaScript 基础
  2. 有字符csv文件导入matlab_Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件...
  3. windows无法访问指定设备路径或文件_完全免费的文件数据恢复工具:Microsoft Windows File Recovery...
  4. Linux常用命令全网最全
  5. main的方法是Java_Java中的main()方法
  6. Navicat Premium连接SQL Server
  7. iOS 抓包工具 charles工具
  8. 网站服务器中病毒该如何处理,网站被中了木马无法删除怎么办? 解决网站中病毒的办法...
  9. 美国计算机专业硏究生,2014年美国计算机专业研究生排名
  10. android收入管理系统,毕业设计(论文)-基于Android系统的家庭理财通软件的设计——收入管理模块.docx...