2017網易春招筆試 堆磚塊

2022-05-01 07:36:09 字數 896 閱讀 5317

思路:

dp + 滾動陣列。

定義狀態為(當前第幾個磚塊, 兩堆磚塊高度差),於是就變成了和01揹包差不多的問題。

初始只有i = 0時,dp[n][i] = 0,否則dp[n][i] = -inf.

dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - a[i]], dp[i + 1][j + a[i]] + a[i]).

(或者dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - a[i]] + a[i], dp[i + 1][j + a[i]]).算哪堆都一樣)

注意j不要超出範圍。為了避免j為負數,要加個偏移量。

還有滾動陣列優化空間。

實現:

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

const

int inf = 0x3f3f3f3f, maxn = 500000;8

int a[55], dp[2][2 * maxn + 1

], n;910

bool check(int

x)11

1415

intsolve()

1631}32

return dp[0

][maxn];33}

3435

intmain()

3642

int x =solve();

43if (x > 0) cout << x <44else puts("-1"

);45

return0;

46 }

2017網易春招 分餅乾(DP

易老師購買了一盒餅乾,盒子中一共有k塊餅乾,但是數字k有些數字變得模糊了,看不清楚數字具體是多少了。易老師需要你幫忙把這k塊餅乾平分給n個小朋友,易老師保證這盒餅乾能平分給n個小朋友。現在你需要計算出k有多少種可能的數值 輸入描述 輸入包括兩行 第一行為盒子上的數值k,模糊的數字用x表示,長度小於1...

9 塗棋盤 2017網易春招

程式設計題 塗棋盤 時間限制 1秒 空間限制 32768k 小易有一塊n n的棋盤,棋盤的每乙個格仔都為黑色或者白色,小易現在要用他喜歡的紅色去塗畫棋盤。小易會找出棋盤中某一列中擁有相同顏色的最大的區域去塗畫,幫助小易算算他會塗畫多少個棋格。輸入描述 輸入資料報括n 1行 第一行為乙個整數n 1 n...

10 小易記單詞 2017網易春招

程式設計題 小易記單詞 時間限制 1秒 空間限制 32768k 小易參與了乙個記單詞的小遊戲。遊戲開始系統提供了m個不同的單詞,小易記憶一段時間之後需要在紙上寫出他記住的單詞。小易一共寫出了n個他能記住的單詞,如果小易寫出的單詞是在系統提供的,將獲得這個單詞長度的平方的分數。注意小易寫出的單詞可能重...