回文數(shù)組 搜狐2018秋招筆試題

對(duì)于一個(gè)給定的正整數(shù)組成的數(shù)組 a[] ,如果將 a 倒序后數(shù)字的排列與 a 完全相同,我們稱這個(gè)數(shù)組為“回文”的。例如, [1, 2, 3, 2, 1] 的倒序是他自己,所以是一個(gè)回文的數(shù)組;而 [1, 2, 3, 1, 2] 的倒序是 [2, 1, 3, 2, 1] ,所以不是一個(gè)回文的數(shù)組。
對(duì)于任意一個(gè)正整數(shù)數(shù)組,如果我們向其中某些特定的位置插入一些正整數(shù),那么我們總是能構(gòu)造出一個(gè)回文的數(shù)組。輸入一個(gè)正整數(shù)組成的數(shù)組,要求你插入一些數(shù)字,使其變?yōu)榛匚牡臄?shù)組,且數(shù)組中所有數(shù)字的和盡可能小。輸出這個(gè)插入后數(shù)組中元素的和。例如,對(duì)于數(shù)組 [1, 2, 3, 1, 2] 我們可以插入兩個(gè) 1 將其變?yōu)榛匚牡臄?shù)組 [1, 2, 1, 3, 1, 2, 1] ,這種變換方式數(shù)組的總和最小,為 11 ,所以輸出為 11 。
輸入描述:

輸入數(shù)據(jù)由兩行組成: 第一行包含一個(gè)正整數(shù) L,表示數(shù)組 a 的長(zhǎng)度。第二行包含L個(gè)正整數(shù),表示數(shù)組 a。  
對(duì)于 40% 的數(shù)據(jù):1<L<=100 達(dá)成條件時(shí)需要插入的數(shù)字?jǐn)?shù)量不多于2個(gè)。
 對(duì)于 100% 的數(shù)據(jù):1 < L<=1,000 0<a[i]<=1,000,000 達(dá)成條件時(shí)需要插入的數(shù)字?jǐn)?shù)量沒(méi)有限制。

輸出描述:

輸出一個(gè)整數(shù),表示通過(guò)插入若干個(gè)正整數(shù)使數(shù)組 a 回文后,數(shù)組 a 的數(shù)字和的最小值。

Example:

Input:8
      51 23 52 97 97 76 23 51
Output:598

采用動(dòng)態(tài)規(guī)劃

import java.util.Scanner;
/**
 * Created by Katakuly on 2018/9/2.
 */
public class Main {
    private final static int MAX = 1002;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int length = scanner.nextInt();
        int[] array = new int[length];
        int[][] dp = new int[MAX][MAX];
        for (int i = 0; i < length; i++) {
            array[i] = scanner.nextInt();
        }
        for (int i = 0; i < dp.length; i++) {
            for (int j = 0; j < dp[i].length; j++) {
                dp[i][j] = 0;
            }
        }
        for (int i = 0; i < length; i++) {
            dp[i][i] = array[i];
        }
        for (int i = length - 2; i >= 0; --i) {
            for (int j = i + 1; j < length; ++j) {
                if (array[i] == array[j])
                    dp[i][j] = dp[i + 1][j - 1] + 2 * array[i];
                else
                    dp[i][j] = getMin(dp[i + 1][j] + 2 * array[i], dp[i][j - 1] + 2 * array[j]);
            }
        }
        int res = dp[0][length - 1];
        System.out.println(res);
    }

    public static int getMin(int a, int b) {
        return a < b ? a : b;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、用C語(yǔ)言實(shí)現(xiàn)一個(gè)revert函數(shù),它的功能是將輸入的字符串在原串上倒序后返回。 2、用C語(yǔ)言實(shí)現(xiàn)函數(shù)void ...
    希崽家的小哲閱讀 6,682評(píng)論 0 12
  • 來(lái)源:NumPy Tutorial - TutorialsPoint 譯者:飛龍 協(xié)議:CC BY-NC-SA 4...
    布客飛龍閱讀 33,516評(píng)論 6 97
  • 敬畏—進(jìn)入—體驗(yàn)—交給—持續(xù) 1,缺啥補(bǔ)啥,怕啥練啥; 2,一切為我所用,所用為團(tuán)隊(duì)家; 3,我想變,我要變,我...
    cac47ec5e164閱讀 175評(píng)論 0 0
  • 如何在nginx里設(shè)置權(quán)限 安裝nginx 略 配置密碼 這里拿用戶名為sayuri,儲(chǔ)存文件為/etc/ngin...
    喪尸百合獸閱讀 1,034評(píng)論 0 1
  • A對(duì)B說(shuō):"我要離開這個(gè)公司。我恨這個(gè)公司!" B建議道:"我舉雙手贊成你報(bào)復(fù)!破公司一定要給它點(diǎn)顏色看看。不過(guò)你...
    瀏文灰閱讀 188評(píng)論 0 0

友情鏈接更多精彩內(nèi)容