题目来源于知识星球—英雄算法联盟,六月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、2310.个位数字为K的整数之和(中等)
1.题目描述
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.题目描述
2.解题思路
后续再战!
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!