lintcode想讓它最好的員工之一選擇在n個城市間旅行來收集演算法問題。但是只工作不玩耍,聰明的孩子也會變傻,你可以在某些特定的城市並且乙個星期裡去度假。你的工作是安排旅行,盡可能多的假期,但是有一些規則和限制你需要遵守。
規則和限制:
您只能在1個城市中旅行,由0到n-1的索引表示。一開始,你周一在城市0。
這些城市都是通過航班連線起來的。這些航班被表示為n*n矩陣(非必要對稱),稱為代表航空公司從城市i到j城市狀態的flights矩陣。如果沒有從城市i到城市j的航班,flights[i][j] = 0;否則,flights[i][j]= 1。還有,flights[i][i] = 0。
你總共有k周(每週有7天)旅行。你只能每天最多乘坐一次航班,而且只能在每週一早上乘坐航班。由於飛行時間太短,我們不考慮飛行時間的影響。
對於每個城市,你只能在不同的星期裡限制休假日,給定乙個命名為days的n*k矩陣表示這種關係。對於days[i][j]的值,它表示你可以在j+1周的城市i裡休假的最長天數,你得到的是flights矩陣和days矩陣,你需要輸出你在k周期間可以獲得的最長假期。
輸入:flights = [[0,1,1],[1,0,1],[1,1,0]],days = [[1,3,1],[6,0,3],[3,3,3]]
輸出:12
解釋:ans = 6 + 3 + 3 = 12.
最好的策略之一是:
第一周:周一從城市0飛往城市1,休假6天,工作1天。
(雖然你從城市0開始,但從周一開始,我們也可以飛到其他城市去。)
第二週:周一從城市1飛到城市2,休假3天,工作4天。
第三週:呆在城市2,休假3天,工作4天。
輸入: flights = [[0,0,0],[0,0,0],[0,0,0]],days = [[1,1,1],[7,7,7],[7,7,7]]
輸出:3
解釋:ans = 1 + 1 + 1 = 3.
因為沒有航班可以讓你飛到另乙個城市,所以你必須在城市裡呆3個星期。
每個星期,你只有一天休假的時間和六天的工作。
所以假期的最大天數是3
輸入:flights = [[0,1,1],[1,0,1],[1,1,0]],days = [[7,0,0],[0,7,0],[0,0,7]]
輸出:21
解釋:ans = 7 + 7 + 7 = 21.
最好的策略之一是:
第一周:呆在城市0,玩7天。
第二週:周一從城市0飛到城市1,然後休假7天。
第三週:周一從城市1飛到城市2,然後休假7天。
考點:
題解:dp[i]表示最後到達i城市的最長休假時間。先列舉週數,然後列舉終點,然後是起點,判斷是否前往(temp[j] = math.max(temp[j], dp[k] + days[j][i])?,即是否進行轉移。每週更新dp陣列,最後從dp陣列選擇最大值即可。
public class solution }}
dp = temp;
}int ans = 0;
for(int i = 0; i < n; i++)
return ans;
}}
谷歌面試題
這個所謂的面試沒有物理存在,只是邏輯上等同於。題目要求如下 整數序列q中的每個元素都至少能被整數a和b中的乙個整除,現給定a和b,請計算出q中的前n項元素。例如,當a 3,b 5,n 6時,q序列的前6項元素為3,5,6,9,10,12。1 設計函式void generate int a int b...
谷歌面試題
某獵頭收集了140多個google的面試題,都張到他的blog中了,主要是下面這些職位的,因為被牆,且無任何敏感資訊,所以,我原文搬過來了。這篇blog例舉了google用來面試下面這幾個職位的面試題。很多不是很容易回答,不過都比較經典與 是google,microsoft,amazon之類的公司的...
假期(面試題四)
1 python如何生成隨機數 可以使用python的內建模組random,random.randint 1,10 產生乙個1 10的隨機數 還有小數,random應有盡有 2 如何在function裡面設定乙個全域性變數 可以在function內部global宣告乙個全域性變數 3 介紹一下try...