zoukankan      html  css  js  c++  java
  • 按序组合成最大的数

    描述

    给定两个数组,由数字 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]
    
  • 相关阅读:
    css 布局方式
    初识cv
    CSS 样式表{二}
    获取设备通讯录信息
    iOS Block界面反向传值小demo
    在iOS中如何正确的实现行间距与行高
    iOS开发- 获取本地视频文件
    view围绕圆心自转
    监测网络状态
    简单的九宫格算法与使用
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/9776167.html
Copyright © 2011-2022 走看看