LeetCode 1449 数位成本和为目标的最大数字[动态规划] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1449 数位成本和为目标的最大数字[动态规划] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
六级考试当天困难有点顶不住,主要思路也很简单,首先得到最多的数位个数,个数越多相对组合得到的数值一定越大,之后就是组合问题,在组合问题中,从最大的数进行遍历(即8,先遍历大的血赚,最后得到的值越大),j也从target出发,此时的dp[target]是最优解,逆着最优解走一定能得到最终的结果,代码如下:
class Solution {
public:
string largestNumber(vector<int> &cost, int target) {
vector<int> dp(target + 1, INT_MIN);
dp[0] = 0;
// 遍历每一个可能的cost
for (int c : cost) {
for (int j = c; j <= target; ++ j) {
dp[j] = max(dp[j], dp[j - c] + 1);
}
}
if (dp[target] < 0) {
return "0";
}
string ans;
// 最多1,2,3...9,逆向过程,从后往前找最优的结果
for (int i = 8, j = target; i >= 0; i--) {
for (int c = cost[i]; j >= c && dp[j] == dp[j - c] + 1; j -= c) {
ans += '1' + i;
}
}
return ans;
}
};
以上是关于LeetCode 1449 数位成本和为目标的最大数字[动态规划] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
力扣python每日抑题——1449. 数位成本和为目标值的最大数字
[H背包] lc1449. 数位成本和为目标值的最大数字(背包求具体方案+状态定义+边界情况)
leetcode-26双周赛-5399-数位成本和为目标值的最大数字