2018網易秋招 合唱

2021-08-08 10:53:32 字數 1912 閱讀 4786

題目:

小q和牛博士合唱一首歌曲,這首歌曲由n個音調組成,每個音調由乙個正整數表示。

對於每個音調要麼由小q演唱要麼由牛博士演唱,對於一系列音調演唱的難度等於所有相鄰音調製化幅度之和, 例如乙個音調序列是8, 8, 13, 12, 那麼它的難度等於|8 - 8| + |13 - 8| + |12 - 13| = 6(其中||表示絕對值)。

現在要對把這n個音調分配給小q或牛博士,讓他們演唱的難度之和最小,請你算算最小的難度和是多少。

如樣例所示: 小q選擇演唱難度為1, 牛博士選擇演唱難度為2,難度之和為3,這乙個是最小難度和的方案了。

輸入描述:

輸入包括兩行,第一行乙個正整數n(1 ≤ n ≤ 2000) 第二行n個整數v[i](1 ≤ v[i] ≤ 10^6), 表示每個音調。

輸出描述:

輸出乙個整數,表示小q和牛博士演唱最小的難度和是多少。

輸入例子1:

5 1 5 6 2 1

輸出例子1:

3程式:

c版本

#include 

#include

typedef

long

long llong;

inline

void getmin(llong& n, llong x)

#define maxn 2020

int n;

int v[maxn], cost[maxn];

void read()

}llong dp[maxn][maxn];

void work()

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

}for (int i = 0; i < n - 1; ++i)

printf("%lld\n", res);

}int main()

c++版本(此版本只能ac70%,未找到原因)

#include

#include

#include

using

namespace

std;

int main()

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

dp[i][i - 1] = min;

}long res =1000000;

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

if (dp[n - 1][i] < res)

res = dp[n - 1][i];

cout

0;}

點評:

此題採用動態規劃

容易想到乙個人繼續演唱或換人演唱的時候發生狀態轉移:

可先設 dp[i][j] 表示當前小q唱到第 i 個音調,牛博士唱到第 j 個音調的難度和;

不妨設當前 i > j :

若 i - 1 == j 則發生換人,由於不知道上一次 i 唱到**,狀態由 min, k < j 轉移來;

若 i - 1 > j 則表示當前是從 i - 1 唱到 i 的,沒有換人,狀態由 dp[i-1][j] + abs(v[i] - v[i-1]) 累加;

不妨設 dp[i][j] 表示當前演唱到第 i 個,上乙個人演唱到第 j 個,則狀態轉移方程為

dp[i][j] = dp[i-1][j] + abs(v[i] - v[i-1]), j < i - 1

dp[i][i -1] = min, k < i - 1

初始情況是若當前有 i 個音調,可以讓乙個人只唱第乙個或最後乙個音調,剩下的音調都由另乙個人唱:

dp[i][0] = dp[i-1][0] + abs(v[i] - v[i-1]), i ≥ 2

dp[i][i-1] = dp[i-1][i-2] + abs(v[i-1] - v[i-2]), i ≥ 2

網易2018秋招筆試題之合唱

小q和牛博士合唱一首歌曲,這首歌曲由n個音調組成,每個音調由乙個正整數表示。對於每個音調要麼由小q演唱要麼由牛博士演唱,對於一系列音調演唱的難度等於所有相鄰音調製化幅度之和,例如乙個音調序列是8,8,13,12,那麼它的難度等於 8 8 13 8 12 13 6 其中 表示絕對值 現在要對把這n個音...

2018網易校招題

1 為了得到乙個數的 相反數 我們將這個數的數字順序顛倒然後再加上原先的數得到 相反數 例如,為了得到1324的 相反數 首先我們將該數的數字順序顛倒。我們得到5231,之後再加上原先的數,我們得到5231 1325 6556,如果顛倒之後的數字有字首 字首零將會被忽略。例如n 100。顛倒之後是1...

2018網易秋招內推筆試題 彩色的磚塊

題目 小易有一些彩色的磚塊。每種顏色由乙個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有乙個給定的字串s,s中每個字元代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。如果最多存在一對不同顏色的相鄰磚塊,那麼這行磚塊就很漂亮的。請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。如果兩...