LeetCode 1981. 最小化目标值与所选元素的差(DP)
文章目录
- 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)相关推荐
- LeetCode 1058. 最小化舍入误差以满足目标(排序+贪心)
文章目录 1. 题目 2. 解题 1. 题目 给定一系列价格 [p1,p2-,pn] 和一个目标 target,将每个价格 pi 舍入为 Roundi(pi) 以使得舍入数组 [Round1(p1), ...
- LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., st ...
- leetcode/加减的目标值,给数组元素添加+或-号组成的表达式值=target的方案数
代码 package com.xcrj;import java.util.Arrays;/*** 剑指 Offer II 102. 加减的目标值* 给定一个正整数数组 nums 和一个整数 targe ...
- LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...
- LeetCode 2035. 将数组分成两个数组并最小化数组和的差
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给你一个 ...
- LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...
- LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums 和一个目标值 goal . 你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal . 也就是说,如果子序列元 ...
- 轻量级流程图控件GoJS示例连载(一):最小化
GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和 HTML5 Canvas程序中创建流程图,且极大地简化你的JavaScript / Canvas 程序. 小编为大 ...
- CentOS6.5最小化安装+自定义安装包
本文出自 "老男孩linux培训" 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1564620 (1)系统安装类型选择及自定义额 ...
最新文章
- 内存、性能问题分析的利器——valgraind
- char [] 和 char * 区别
- 年前最后一项技能树 Rust ,攻碉堡 ing (Bilibili 视频整理)
- 转: ashx中使用Session
- wxWidgets:库LIB清单
- sql update 多个字段_SQL学习之路-20190707
- 64ubuntu编译32位程序
- ASP.NET 自定义控件从入门到精通3补充
- Flutter实战视频-移动电商-18.首页_火爆专区后台接口调试
- 一千行代码铸造Terminal文本编辑器
- 卫星星历TLE格式说明
- [Qt] 基于Tcp协议的聊天室实现(Chat Room 局域网通信)
- Jenkins - Publish Over SSH
- 陈小龙linux及服务器正文 配置rewrite
- Google Earth Engine(GEE)计算热度(LST)
- python自动发送邮件不需要发件邮箱_python 自动发送邮件
- 在Ubuntu 16.04中安装FBReader阅读器,阅读mobi文件
- 使用metasploit破解ssh密码
- python爬虫天猫商品数据及分析(2)
- Mysql错误: Incorrect string value: '\xEF\xBF\xBD\xEF\xBF\xBD...' for column 'sql_info' at row 72
热门文章
- 前端之 JavaScript 基础
- 有字符csv文件导入matlab_Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件...
- windows无法访问指定设备路径或文件_完全免费的文件数据恢复工具:Microsoft Windows File Recovery...
- Linux常用命令全网最全
- main的方法是Java_Java中的main()方法
- Navicat Premium连接SQL Server
- iOS 抓包工具 charles工具
- 网站服务器中病毒该如何处理,网站被中了木马无法删除怎么办? 解决网站中病毒的办法...
- 美国计算机专业硏究生,2014年美国计算机专业研究生排名
- android收入管理系统,毕业设计(论文)-基于Android系统的家庭理财通软件的设计——收入管理模块.docx...