分組題目描述
在farmer john最喜歡的節日裡,他想要給他的朋友們贈送一些禮物。由於他並不擅長包裝禮物,他想要獲得他的奶牛們的幫助。你可能能夠想到,奶牛們本身也不是很擅長包裝禮物,而farmer john即將得到這一教訓。
farmer john的n頭奶牛(1≤n
≤104
1≤n≤10^4
1≤n≤10
4 )排成一行,方便起見依次編號為1…n。奶牛i的包裝禮物的技能水平為si。她們的技能水平可能參差不齊,所以fj決定把她的奶牛們分成小組。每一組可以包含任意不超過k頭的連續的奶牛(1≤k
≤103
1≤k≤10^3
1≤k≤10
3),並且一頭奶牛不能屬於多於乙個小組。由於奶牛們會互相學習,這一組中每一頭奶牛的技能水平會變成這一組中水平最高的奶牛的技能水平。
請幫助fj求出,在他合理地安排分組的情況下,可以達到的技能水平之和的最大值。
輸入描述:
輸入的第一行包含n和k。以下n行按照n頭奶牛的排列順序依次給出她們的技能水平。技能水平是乙個不超過10^5的正整數。
輸出描述:
輸出fj通過將連續的奶牛進行分組可以達到的最大技能水平和。
示例1輸入
7 3115
7925
10
輸出84
說明
在這個例子中,最優的方案是將前三頭奶牛和後三頭奶牛分別分為一組,中間的奶牛單獨成為一組(注意一組的奶牛數量可以小於k)。這樣能夠有效地將7頭奶牛的技能水平提高至15、15、15、9、10、10、10,和為84
題解:狀態轉移方程:dp[i] = max(dp[i], dp[i - (i - j + 1)] + mmax * (i - j +1))
。該方程表示,當前i節點的最大值,一定是往前推j個數,將這一段變為最大數值值,然後再加上前i-(i-j+1)的最優情況。所以列舉j即可。
c++ ac **
#include
using
namespace std;
intmain()
}printf
("%d\n"
, p[n]);
//system("pause");
return0;
}
文章參考自: 牛客假日團隊賽 A 乘積最大
今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...
牛客網 牛客假日團隊賽5 隨機數 數字dp
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 正如你所知,奶牛們沒有手指以至於不能玩 石頭剪刀布 來任意地決定例如誰先 的順序。她們甚至也不能通過仍硬幣的方式。所以她們通過 round number 競賽的方式。第...
牛客假日團隊賽5 K
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 最近,奶牛們熱衷於把金幣包在麵粉裡,然後把它們烤成餡餅。第i塊餡餅中含有ni 1 ni 25 塊金幣,並且,這個數字被醒目地標記在餡餅表面。奶牛們把所有烤好的...