2018秋招 搜狐 回文陣列

2021-08-08 09:49:47 字數 1521 閱讀 8799

給定乙個正整數組成的陣列,要求往陣列中插入整數,使得插入後的陣列是乙個回文陣列,並且回文陣列的累加和最小。輸出這個最小和。

栗子:

原始陣列:1 2 3 1 2

插入後:1 2 1 3 1 2 1,陣列和11.

輸入:

包含2行,第一行陣列元素個數n, 第二行為n個陣列元素。 n <= 10000.

輸出:

回文陣列的最小和。

找出原陣列中累加和最大的回文子串行。待插入的陣列元素就是回文子串行剩下的元素。

超時**:

#include 

using

namespace

std;

bool check(vector

& vec)

return

true;

}void helper(vector

>& vv, vector

& res, vector

vec, int depth)

res.push_back(vec[depth]);

helper(vv, res, vec, depth + 1);

res.pop_back();

helper(vv, res, vec, depth + 1);

}int main() }}

cout

<< partsum << endl;

cout

<< sum + sum - partsum << endl;

}return

0;}

傳統的求最長回文子串行的問題可以轉化為lcs(最長公共子串行問題)。

本題中,我們沿用這個思路。

求累加和最大的公共子串行

狀態方程和最長公共子串行的狀態方程變化不大。

dp[i][j] = dp[i - 1][j - 1] +a[i], a[i] == b[j]

dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]), a[i] != b[j];

// a原始陣列,b為反轉陣列

ac**:

#include 

using

namespace

std;

long

long a[10010];

long

long b[10010];

long

long dp[10010][10010];

int main()

memset(dp, 0, sizeof(dp));

for (int i = 1; i <= n; ++i)

}cout

<< sum + sum - dp[n][n] << endl;

}return

0;}

搜狐2017秋招程式設計題

public class main system.out.println res sc.close 二 給定乙個十進位制的正整數number,選擇從裡面去掉一部分數字,希望保留下來的數字組成的正整數最大。輸入描述 輸入為兩行內容,第一行是正整數number,1 length number 1000。...

《2018秋招小結》

截至目前為止,收到了四份offer,分別是全民直播 森憶製藥 上海郵電設計院和上海百聯。回顧八月份辭職以來,中途除了數學建模四天國慶9天之外,每天都在為工作奔波。基本狀態是九月份的大廠筆試的稀里糊塗的,整體包括 其實9月份自己的心態還是好的,可以說是滿懷期待的,在辭了實習之後躊躇滿志。然而,並沒有面...

京東2018秋招程式設計題

c 開發工程師京東 2018秋招程式設計題 後續更新。將乙個數n的各數字分成兩部分,兩部分之和相等,則稱這個數為神奇數。比如242分成 2,2 4 輸入乙個範圍 l,r 輸出這個範圍內神奇數的個數。示例 輸入 1,50 輸出 4解析 判斷乙個數是否是神奇數,首先應該獲取其各個數字,按照神奇數的定義,...