XJOI 迷你火車頭

2021-07-06 09:31:59 字數 1490 閱讀 7331

題目描述

一列火車有乙個火車頭拖著一長串的車廂,每個車廂有若干個乘客。一旦火車頭出了故障,所有的車廂就只能停在鐵軌上了,因此鐵路局給每列火車配備了三個迷你火車頭,每個迷你火車頭可以拖動一定數量的車廂,以便火車頭發生故障後能夠拖走部分車廂。

鐵路部門對迷你火車頭作了如下規定:

1.迷你火車頭能夠拖動的最大車廂數是確定的,這個數量對三個迷你火車頭都是相同的。

2.一旦火車頭發生故障,迷你火車頭要拖走盡可能多的旅客,每節車廂的旅客數事先是已知的,並且旅客不得隨意更換車廂。

3.乙個迷你火車頭拖走的車廂必須是連續的,所有車廂從1開始編號。

假如有7節車廂,乙個迷你火車頭最多可以拖動二節車廂,1到7號車廂中的旅客人數分別為35,40,50,10,30,45和60。

如果三個迷你火車頭拖走的車廂分別是1-2,3-4和6-7,它們帶走的旅客總數將達到240人,其它任何方案都不可能超過該數,所以240就是這個問題的解。

給定車廂數,每節車廂的旅客人數和乙個迷你火車頭能拖動的最大車廂數,寫乙個程式求出三個迷你火車頭最多能帶走的旅客數。

輸入

輸入檔案共有三行,第一行為乙個正整數n,其中n<=50,000,表示車廂總數,第二行為n個用空格隔開的整數,依次表示n節車廂的旅客人數,每節車廂人數不超過100,第三行為乙個正整數m表示迷你火車頭能夠拖動的最大車廂數,其中m<=n/3。

輸出

輸出檔案僅有一行包含乙個整數表示三個迷你火車頭最多能帶走的旅客數。

樣例

樣例輸入:

35 40 50 10 30 45 60

樣例輸出:

據說這是個暴力列舉+貪心的水題然而我還是中規中矩的打了dp。。。。。。

貪心的做法:題目等同於選取三個區間,從而使這三個區間和最大。那麼顯然三個區間不互相覆蓋一定是最優的(因為沒有負數)。那麼我們從第k+1個到第n-k+1列舉中間的火車就好。什麼?tle?沒關係!對於整個陣列,我們維護乙個字首和,維護乙個字尾和,這樣我們就能在o(n)的時間內得出答案(常數當然不算)。

dp做法:先預處理出乙個小火車頭在第i個地點所能載得的人數,然後我們開乙個二維dp陣列,第一維記錄位置,第二維記錄第幾個小火車頭。因為我們有乙個小火車頭能載得的人數,那麼我們能優先處理出dp[i][1]來,這樣我們就只需要dp出第二和第三個小火車頭就行了。方程也很容易寫出:dp[i][j]=max(dp[i-1][j],dp[i-k][j-1]+w[i])

dp的**

#include

#include

using

namespace

std;

const

int maxn = 55000;

int n,k,a[maxn],dp[maxn][4],w[maxn];

int main()

最大化引數 火車頭 鐵路大亨各火車頭的效能引數

英文名 中文名發明時間 退役時間 費用保養 燃料加速性 能可靠性 trevithick 1 特里維西亞 1e 10k6k 8kstephenson rocket 史蒂芬森 火箭ae w16k 6k8k 2 4 0 john bull 2 4 0 約翰牛aew 23k7k 9k0 4 0 dewitt...

蘋果cms火車頭發布模組

檔案 n459.com file 25127180 477253892 教程僅供參考,菜鳥 老鳥勿噴 1 新建發布模組 2 自動登入 登入 字尾 index.php?m admin check 登入post資料 表單名 m name 表單值 使用者名稱 表單名 m password 表單值 密碼 表...

火車頭抓取阿里巴巴內容頁

最近在做阿里巴巴的抓取,對於這種大型的 簡單的按照教程的標籤前後擷取,很難以應用這種複雜的樣式,因為對於阿里和 這種 內容頁的樣式是使用者自己定義的,所以說前後擷取已經不再試用。在網上參考了很多這方面的,真可謂可以利用的資訊甚少。在火車頭論壇上逛了一下,看見大家對於這種 的抓取,都先用抓包軟體分析 ...