LeetCode 1981. 最小化目标值与所选元素的差(DP)
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個(gè)大小為 m x n 的整數(shù)矩陣 mat 和一個(gè)整數(shù) target 。
從矩陣的 每一行 中選擇一個(gè)整數(shù),你的目標(biāo)是 最小化 所有選中元素之 和 與目標(biāo)值 target 的 絕對(duì)差 。
返回 最小的絕對(duì)差 。
a 和 b 兩數(shù)字的 絕對(duì)差 是 a - b 的絕對(duì)值。
示例 1:
示例 2:
示例 3:
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimize-the-difference-between-target-and-chosen-elements
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
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; // 可以拿 標(biāo)記為1for(int i = 1; i < m; ++i){vector<int> temp(limit, 0);for(int v = limit-1; v >= 0; --v){if(dp[v] == 0) // 前面狀態(tài)不存在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/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1981. 最小化目标值与所选元素的差(DP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 1644. 二叉树的最
- 下一篇: LeetCode 2181. 合并零之间