按序组合成最大的数

描述

给定两个数组,由数字 0-9 组成的,长度分别为 a 和 b,需要用 a、b 两个数组中的数字组合得到长度为 k (k <= a+b)的正整数,输出所有可能的组合中数值最大的一个(原同一数组中的数字顺序不能改变)

Solution

\(f_{i,j,k}\)表示第一个串到第\(i\)个位置, 第二个串到第\(j\)个位置, 一共取了\(k\)

有毒啊
是不是我Python姿势不对啊
好像做了一点点常数优化就过了

Code

def solution(line):
    tmp = line.split(' ')
    a = tmp[0].split(',')
    b = tmp[1].split(',')
    k = min(len(a) + len(b), int(tmp[2]))
    f = []
    n1 = len(a)
    n2 = len(b)
    f = []
    for i in range(n1):
        a[i] = int(a[i])
    for j in range(n2):
        b[j] = int(b[j])
    for i in range(n1 + 1):
        f.append([])
        for j in range(n2 + 1):
            f[i].append([])
            for k in range(k + 1):
                f[i][j].append(0)
    for i in range(1, n1 + 1):
        f[i][0][1] = a[i - 1]
    for j in range(1, n2 + 1):
        f[0][j][1] = b[j - 1]
    for i in range(n1 + 1):
        for j in range(n2 + 1):
            for k in range(1, k + 1):
                if i > 0:
                    f[i][j][k] = max(f[i][j][k], max(f[i - 1][j][k], f[i - 1][j][k - 1] * 10 + a[i - 1]))
                if j > 0:
                    f[i][j][k] = max(f[i][j][k], max(f[i][j - 1][k], f[i][j - 1][k - 1] * 10 + b[j - 1]))
    return f[n1][n2][k]

转载于:https://www.cnblogs.com/qdscwyy/p/9776167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值