【刷爆LeetCode】六月算法集训(28)动态规划

题目来源于知识星球—英雄算法联盟,六月算法集训专题

前言

跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!


一、2310.个位数字为K的整数之和(中等)

1.题目描述

https://img-blog.csdnimg.cn/9228089a7fce408c9bef9d20774f271b.jpeg =500x

2.解题思路

题目的要求是所有整数之和为num,每个整数的个位是K,返回最小的整数个数。
如果不满足题意,返回-1.如果为空,则返回0.
因此,将所有个位数字为K的数全部初始化出来,每个数字是一个物品的重量,
消耗物品为1。背包的总容量为num,转换成完全背包问题,求容量为num的
最小消耗。

3.代码演示(C++)

class Solution 
{
    int pack[1010], packsize;
public:
    int minimumNumbers(int num, int k) 
    {
        int i, j;
        int dp[3010];
        packsize = 0;
        for(i = 0; i <= 3000; ++i) 
        {
            if(i % 10 == k) 
            {
                pack[++packsize] = i;
            }
        }
        for(j = 0; j <= num; ++j) 
        {
            dp[j] = 100000000;
        }
        dp[0] = 0;
        for(i = 1; i <= packsize; ++i) 
        {
            for(j = pack[i]; j <= num; ++j) 
            {
                // dp[i][j] 表示前i个数组合出j,所需要的数字的最小个数
                if(dp[ j-pack[i] ] + 1 < dp[j]) 
                {
                    dp[j] = dp[ j-pack[i] ] + 1;
                }
            }
        }
        return dp[num] >= 100000000 ? -1 : dp[num];
    }
};

4.题目链接

题目传送门


二、1594.矩阵的最大非负积(中等)

1.题目描述

https://img-blog.csdnimg.cn/2d4646142b14485bbfd589dec0946081.jpeg =500x

2.解题思路

后续再战!

3.代码演示(C++)


4.题目链接

题目传送门


总结

每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值