华为机考
天涯小才
这个作者很懒,什么都没留下…
展开
-
密码截取——动态规划
HJ32 密码截取解析:这道题很明显是求回文子串的问题,跟之前leetcode上面的求回文子串个数很像。用dp[i][j]数组表示索引从i~j的位置能否形成回文子串,i,j的推导需要从i + 1,j - 1处推得,故i从后遍历,j从前遍历。如果是s[i] != s[j],则不可能形成回文子串。如果s[i] == s[j],且i和j相等(一个元素)或者i和j相邻,中间无元素,是回文子串,长度为2。如果中间还有其他元素,则判断中间元素是否是回文子串。# pythona = input()dp = [[原创 2022-04-18 22:58:51 · 698 阅读 · 0 评论 -
HJ24 合唱队——动态规划
HJ24 合唱队解析:这道题可以参考该视频的思路,使用left和right数组记录元素i左边递增的元素个数和右边递减元素的个数。left和right数组的值由前面的状态推出,如果i比前面的某一元素ii大,则left[i] = max(left[i], left[ii] + 1),最后只需把left和right加起来减一即是合唱队剩余人数。注意:这道题在牛客上用python运行显示超时,用Java可以通过。# pythonn = int(input())list = [] left = [1]原创 2022-04-17 17:49:31 · 1788 阅读 · 0 评论 -
最大子矩阵和
最大子矩阵和已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。 比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 的最大子矩阵是 9 2 -4 1 -1 8 这个子矩阵的大小是15。解析:这道题目参考此视频的思路,这里用了三层循环,用辅助矩阵a来记录这一行中,从1-i所有位置的和,计算i~j列的和只需要用a[j] - a[i - 1],减少计算i~j列的和这一层循环。实际是使用了枚举+贪原创 2022-04-16 17:23:05 · 679 阅读 · 0 评论 -
动态规划——购物单
HJ16-购物单这是一道典型的0-1背包问题,一开始的反应就是外层循环正向遍历物品,内层循环反向遍历背包容量。但由于物品增加了附件这一属性,使得这道题难度增加了不少,可以参考该视频处理物品的思路,每个物品用长度为6的数组来分别保存索引为i的物品主件价格,主件价值,附件1价格,附件1价值,附件2价格,附加2价值。对物品的处理弄明白了,其他地方跟之前做过的0-1背包问题都差不多了。# pythonmoney, n = map(int, input().split(" "))# dp[j] 表示mone原创 2022-04-15 22:10:57 · 917 阅读 · 1 评论