题目:
有n个正整数数,将他们按十进制按某种顺序组成一个更大的整数,求最小的这个整数。
举例,有数字32和321,连接成32132后最小。
又举例,有数字1876,98,21,4,211连接成1876 211 21 4 98是最小的。
解决思路:
1.用背包动态规划的思想很容易。因为ABCD最小的必要条件ABC最小,时间复杂度是0(n*n*k)
2.第二种解决方法要先做一个数学证明。
首先,规定一种比较规则:a->b表示ab<ba成立,记作规则一。
其次:需要证明一个定律。
定律一:n个正整数的最小组合
X1X2X3....Xn中,Xi->Xj(其中i<j)一定成立。
证明这个定律我们可以用反证法。
假设最小的组合中存在Xj->Xi(其中i<j),即XiXj>XjXi那么要证明假设不成立我们只需要证明Xi...Xj不是最小的即可。
可以分两种情况:
第一种:j=i+1。很显然,XjXi比XiXj更小,这种情况假设不成立。
第二种:j>i+1。即Xi Xi+1...Xj-1 Xj。为了方便,我们把中间的记作y,把Xi记作a,把Xj记作b。也就是所,我们必须证明ayb不是最小的。
假如ayb是最小的,那肯定存在ay<ya和yb<by。设a的位数是m,y的位数是n,b的位数是k。那么
1.ay<ya ==> a*10^n+y<y*10^m+a ==> a*(10^n-1)/(10^m-1) < y
2.yb<by ==> y*10^k+b<b*10^n+y ==> y<b*(10^n-1)/(10^k-1)
3.综合1和2可以得出a*(10^k-1)<b*