給定乙個正整數組成的陣列,要求往陣列中插入整數,使得插入後的陣列是乙個回文陣列,並且回文陣列的累加和最小。輸出這個最小和。
栗子:輸入:原始陣列: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]ac**:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]), a[i] != b[j];
// a原始陣列,b為反轉陣列
#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解析 判斷乙個數是否是神奇數,首先應該獲取其各個數字,按照神奇數的定義,...