題目:
現在有n個人排隊買票,已知早上8點開始賣,每個人有兩種買法,單獨買第i個人花費a[i]秒;和後面乙個人一起買,第i和第i+1個人一共花費b[i]秒。求最早什麼時候可以結束排隊
輸入2#樣例組數
2#排隊人數
20 25#a[i]
40#b[i]
1#排隊人數
8#a[i]
輸出08:00:40 am
08:00:08 am
思路:用動態規劃求解,dp[i]是第i個人完成排隊的最小時間。每個人有兩種選擇,第一種自己買,第二種和前面乙個人一起買,因為是前i個人,所以不能和後面那個人一起買。dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i-1])。因為受前兩個的影響,初始化dp[1]=a[1](第乙個人只能自己買),dp[2] = min(dp[1]+a[2],dp[0]+b[1]),所以dp[0]也需要初始化,沒人的時候不用排隊所以為0,後面的都可以通過狀態轉移獲得。
**如下:(部分細節在**標註中)
n =
int(
input()
)for i in
range
(n):
num =
int(
input()
)if num ==0:
#沒人的話,排隊直接結束
print
('08:00:00 am'
)elif num ==1:
#只有乙個人的時候沒有b[i]
a =int(
input()
)else
: list1 =
list
(map
(int
,input()
.split())
) list2 =
list
(map
(int
,input()
.split())
) dp =[0
for _ in
range
(num+1)
] dp[1]
= list1[0]
for i2 in
range(2
,num+1)
: dp[i2]
=min
(dp[i2-1]
+list1[i2-1]
,dp[i2-2]
+list2[i2-2]
) a = dp[num]
#最終需要排隊的總用時
x = a//
3600
#處理成時間表示
y = a%
3600
//60
z = a%
3600%60
if(x+8)
>12:
print
(str
(x-4
).rjust(2,
'0')
+':'
+str
(y).rjust(2,
'0')
+':'
+str
(z).rjust(2,
'0')
,'pm'
)else
:print
(str
(x+8
).rjust(2,
'0')
+':'
+str
(y).rjust(2,
'0')
+':'
+str
(z).rjust(2,
'0')
,'am'
)#rjust(2,'0')是將8變成08,物件是str
2021秋招網易筆試
給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 把要處理的字元分成回文串和非回文串,再將非回文串逆置加到頭部。要注意,已經移動出最長回...
2021網易秋招筆試題(Android開發)
校招的筆試題通常是4道程式設計題,時間為2個小時,每題25分。2021秋招筆試題總結如下,包含問題和 實現。解析 這個很簡單,用python的話只需要用dict統計出每個單詞的個數然後計算出頻率大於1 的單詞,儲存輸出。用dict統計數字 如下 d key d.get key,0 1 d是字典型別的...
2021秋招部分筆試題
2021秋招部分筆試題彙總 企業提供原題 00 00 28 4 6 程式設計題 查詢二叉搜尋樹的葉子節點 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 給乙個二叉查詢樹 binary search tree 的前序遍歷結果陣列,列印出所有的葉子節點。輸入描述 輸入為...