美團點評2017秋招筆試程式設計題 題解

2021-08-09 14:40:27 字數 3133 閱讀 9744

昨晚臨時做了下美團2023年的校招題(純屬無聊),感覺美團的題就做得很舒服了,考想法,**量小,只要你的idea夠好,**就幾行,學習了!

大富翁遊戲,玩家根據骰子的點數決定走的步數,即骰子點數為1時可以走一步,點數為2時可以走兩步,點數為n時可以走n步。求玩家走到第n步(n<=骰子最大點數且是方法的唯一入參)時,總共有多少種投骰子的方法。

n很小,所以你直接算到6就好了,我一開始就沒多想,直接記憶化搜了下.這個題和走樓梯那個題想法是一樣的.

#include 

using

namespace

std;

int dp[7];

int dfs(int n)

int main()

其實這個題有更簡單的方法,就是推通項公式.dp

[n]=

dp[n

−1]+

dp[n

−2]+

⋯+dp

[1] ; dp

[n−1

]=dp

[n−2

]+⋯+

dp[1

] ;

兩個等式相減,得到:dp

[n]=

dp[n

−1]∗

2,dp

[1]=

1 ,即dp

[n]=

2n−1

,所以下面的**更好.

#include 

using

namespace

std;

int main()

給你六種面額 1、5、10、20、50、100 元的紙幣,假設每種幣值的數量都足夠多,編寫程式求組成n元(n為0~10000的非負整數)的不同組合的個數。

首先我想到的是動態規劃,類似於整數拆分,dp

[i][

j]表示,面值為i的錢拿出va

lue[

j]塊錢有多少種方案,那麼為了避免重複,dp

[i][

j]可以由∑j

k=0d

p[i−

valu

e[j]

][k]

轉移過來,初始化的時候dp

[val

ue[i

]][i

]=1 ,最後面值為

n 的方案數為∑6

i=0d

p[n]

[i]。

#include 

using

namespace

std;

#define max_n 10001

#define max_z 6

typedef

long

long ll;

int value = ;

int main()}}

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

for (int j = 0; j < max_z; j++)

sum[i] += dp[i][j];

int n;

while (cin >> n)

cout

<< sum[n] << endl;

return

0;}

仔細想想,這其實是乙個完全揹包問題嘛,先用面值為1的錢去填充,然後再用面值為5的錢去填充,這個時候得到的方案就是面值1和面值5的錢一起去填充的方案數,依次類推就可以了,可以看到完全揹包問題可以轉化為01揹包問題,而且可以優化降維,確實很不錯的解法。

#include 

using

namespace

std;

#define max_n 10001

#define max_z 6

typedef

long

long ll;

int value = ;

int main()

給定一組非負整數組成的陣列h,代表一組柱狀圖的高度,其中每個柱子的寬度都為1。 在這組柱狀圖中找到能組成的最大矩形的面積(如圖所示)。 入參h為乙個整型陣列,代表每個柱子的高度,返回面積的值。

0;}

給出兩個字串(可能包含空格),找出其中最長的公共連續子串,輸出其長度。

還是動態規劃,類似最長公共子串,不過當str[i] != str[j]時,dp[i][j]=0,這是因為再往後即使有相同的字母也不是連續的了,要注意是連續的,忘記說了,dp

[i][

j]表示字串str1.substr(0,i),str2.(0,j)最長連續公共子串的長度,連續子串的結尾分別是i,j

#include 

using

namespace

std;

typedef

long

long ll;

int main()

return

0;}

題解 美團點評2017秋招筆試程式設計題

順序從第四題開始寫到第一題 給出兩個字串 可能包含空格 找出其中最長的公共連續子串,輸出其長度。輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50.輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。示例1輸入 abcde abgde 輸出 2分析 列舉各種長度的各種情況肯定是要超時的 那...

美團點評2017秋招筆試程式設計題 大富翁遊戲

大富翁遊戲,玩家根據骰子的點數決定走的步數,即骰子點數為1時可以走一步,點數為2時可以走兩步,點數為n時可以走n步。求玩家走到第n步 n 骰子最大點數且是方法的唯一入參 時,總共有多少種投骰子的方法。輸入描述 輸入包括乙個整數n,1 n 6 輸出描述 輸出乙個整數,表示投骰子的方法 輸入例子1 6輸...

2017美團秋招筆試程式設計題 後台研發

1 求所有能被7整除的數字 分析 方法一 採用暴力解法,即兩兩數字都組合一遍對7取餘判斷的方法,演算法複雜度o n2 會超時,提交成功率為70 方法二 求乙個數a前面拼接上什麼數能夠被7整除,只需進行以下操作即可 數a前面依次拼上0 6,變為0a,1a,2a 6a。依次判斷這7個數能否被7整除 以1...