牛客網 牛牛送冰淇淋

2021-10-08 17:28:03 字數 1338 閱讀 9476

牛牛公司老闆讓牛牛負責m個冰激凌的運輸。運輸車的冷庫只夠裝n個冰激凌,一次運輸需要t分鐘,返回也需要t分鐘。每個冰激凌製作好有乙個時間。牛牛想知道最短運輸完所有冰激凌的時間,以及在時間最短的情況下最少運輸次數。

示例1輸入

2,3,10,[10,30,40]
輸出

[50,2]
備註:

(1≤n,m,t≤2000)

思路:

動態規劃,本題的關鍵在於如何將問題抽象到動態規劃模型之中,即如何利用動態規劃的解題思路來理解題目。

1. 確定狀態。對於題目來說,需要求兩個最優的值,而比較迷惑的是,對於最少運輸次數而言,與運送時間最短的關係並不相關。換句話說,對於取得最短運送時間的運送次數,一定是所有運送方案中運送次數最少的。證明如下:對於n號冰激凌來說,要完成它的運送至少是在n+t的時間完成,那麼在這之前,不可能存在一種方案能夠使得這個時間提前,也就是說在這之前的最少的方案就是貪心的運送方案。因此使用兩個dp陣列:dp和ctimes分別記錄最短時間和最少次數。

2. 寫到這兒發現並不需要動態規劃,n個一車拉就完事了;

3. 但是還是把動態規劃的思路寫完,確定狀態轉移方程,對於最短時間來說,dp[i]應該是等於,dp[i] = min(dp[i],max(dp[j]+t,c[i])+t);怎麼理解呢,就是在之前的i之前的n個(存在一車一起拉走的可能性),n個他們送完之後再送i和他們等著i一起送這兩者之間較大的,這n個中的最小值。

4. 確認初始值。dp[0]原本應該等於0,但是在本題中,根據遞推公式來說,dp[1]如果需要等於c[1]+t,那麼dp[0]+t就一定需要小於c[1]。所以dp[0]=-t(理論上小於-t也可以)。ctimes[0]=0,ctimes[1]=1。

動態規劃方法

class

solution

c[0]

=0; dp[0]

=-t;

ctimes[0]

=0; ctimes[1]

=1;for

(int i =

1;i<=m;i++)}

return;}

};

貪心方法:

class

solution

return;}

};

牛客網 牛牛找工作

時間限制 2秒 空間限制 65536k 為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標 准來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好...

牛客網 牛牛的數列

題目描述 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。一開始看到這個題,總是被繞進 改變乙個數 中,就想說是不是遍歷陣列,然後每個數都嘗試改變...

牛客網 牛牛打怪獸

題目描述 題意身為屯里第一劍士的牛牛來到訓練場裡闖關,由於過於勤奮,牛牛的寶劍的耐久度降到了 22 這意味著牛牛最多只能打倒兩隻怪獸,否則將會被淘汰。訓練場的地圖可以看作一棵以 11 為根節點的樹,訓練場的終點為這棵樹的葉子結點,樹上的每個結點最多有乙隻怪獸,結點與結點間的邊上沒有怪獸。每乙個有怪獸...