通过拆分给定字符串的最大总和

时间:2015-03-28 10:31:03

标签: algorithm dynamic-programming divide-and-conquer

给定一个仅由数字组成的字符串S.我们需要将字符串分成4个整数,使得它们的总和最大。怎么解决这个问题?请帮忙

注意:每个整数应≤10^ 12且不应包含任何前导零。

每个字符串的大小也几乎为20。

示例:设S = 52310,则答案为56,因为4个整数为52,3,1,0。所以最大总和是56(52 + 3 + 1 + 0)。

如何有效地完成这项工作,因为我不想采用粗暴的解决方案,因为它的高度复杂性,因为在每个可用的4个位置进行拆分会导致非常无效的方法。

1 个答案:

答案 0 :(得分:-1)

试试这个,但是在java

    private void method()
{
    String value = "52310";
    String sortedString ;
    int stringLength;
    long total = 0; 

    char[] arr = value.toCharArray();
    List<String> seperatedIntegers = new ArrayList<String>();

    if(arr.length > 3)
    {
        sortedString = sort(arr);
        stringLength = sortedString.length();

        for(int m = 0 ; m < 3 ; m ++)
        {
            seperatedIntegers.add(sortedString.substring(stringLength - 1, stringLength));          
            stringLength--;
        }

        seperatedIntegers.add(sortedString.substring(0, stringLength));                 
    }



    if(seperatedIntegers.size() > 0)
    {
        for(int n = 0 ; n < seperatedIntegers.size() ; n ++)
        {
            total = total + Long.valueOf(seperatedIntegers.get(n)); 
        }   
    }

    Toast.makeText(getApplicationContext(), String.valueOf(total), Toast.LENGTH_LONG).show();

}

private String sort(char[] arr)
{
    int temp;
    String val = "";

    List<Integer> sortedValues  = new ArrayList<Integer>();

    for(int i = 0; i < arr.length ; i ++)
    {
        sortedValues.add(Integer.valueOf(String.valueOf(arr[i])));
    }


    for(int j = 1; j < sortedValues.size();  j++)
    {
        for(int k = j; k > 0; k--)
        {
            if(sortedValues.get(k) > sortedValues.get(k-1))
            {
                temp=sortedValues.get(k);
                sortedValues.set(k, sortedValues.get(k-1));
                sortedValues.set(k - 1, temp);
            }
        }
    }

    for(int l = 0; l < sortedValues.size() ; l ++)
    {
        val = val + String.valueOf(sortedValues.get(l));
    }

    return val;     
}