版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/89004258
第一题
给一个偶数个数的数组,每两个数组合成一个数后使得最大最小数之差最小:
很简单,先把数组排序,然后把第一个和最后一个数组合,第二个和倒数第二个数组合。。。。。。得到组合后的数组,然后最大值减去最小值就得到结果。
第二题
给很多个0到9这10个数,取a+b个数组成长度为a和b的两个数,前面可以有0,使得他两乘积最小:
想了下,测试了下,先找到较小数,然后把0放入较小数中,对剩余的数一个一个再放入两个数中,这样乘积最小:
# -*- coding:utf-8 -*-
__author__ = 'ShawDa'
def get_res(counts, a, b):
if counts[0] >= min(a, b) or (a+b)>sum(counts):
return 0
min_num, max_num, nums = min(a, b), max(a, b), []
for i, count in enumerate(counts[1:]):
nums += [i+1]*count
A, B = [0]*counts[0], [] # 一人一个
for i, num in enumerate(nums):
if len(A) == min_num:
break
if i%2 == 0:
A.append(num)
else:
B.append(num)
B += nums[i:i+max_num-len(B)]
A = int(''.join(list(map(str, A))))
B = int(''.join(list(map(str, B))))
return A*B
counts = list(map(int, input().split()))
a = int(input())
b = int(input())
print(get_res(counts, a, b))
第三题
leetcode原题,简单的二维动态规划,就是这个:leetcode72. 编辑距离,很经典的一题。