校內互測 陳老師搬書

2021-07-09 18:41:37 字數 1174 閱讀 7096

【問題描述】 

陳老師喜歡網購書籍,經常一次購它個百八十本,然後拿來倒賣牟取暴利。前些天,高一的新同學來了,他便像往常一樣兜售他的書,經過一番口舌,同學們決定買他的書,但是陳老師桌上的書有三堆,每一堆都有厚厚的一疊,他要想個辦法用最輕鬆的方式把書拿下來給同學們。但是你想逗一下陳老師,於是你設計乙個最累的方式給他。若告訴你這三堆分別有i,j,k本書,以及每堆從下到上書的質量,每次取書只能從任一堆的最上面取,那麼請你設計乙個方案,讓他花最大的力氣取下所有的書。 

顯然,每次取書陳老師的體力消耗都會加大,這裡用體力係數代表,取下第一本書時,體力係數為1,第二本書時體力係數為2,依次類推,而每次體力消耗值則為體力係數與書的重量之積。 

舉個例子:三堆書及重量如下:

2             10           3

第一堆   第二堆  第三堆

顯然最累的取書方案是:右左左中,即:3*1+9*2+2*3+10*4=67。 

【輸入】 

第一行3個整數,分別為三堆書的數量i,j,k 第二行至第四行分別為每堆由下至上的書本重量 【輸出】 

輸出最累方式的體力消耗總值。 

【樣例】 

book.in 

3 2 4 

2 3 2 

1 5 

9 8 7 4

book.out

257 

【資料規模】 

對於40%的資料有0≤i,j,k<10; 對於100%的資料有0≤i,j,k<100 

【題解】

很容易想到是dp,因為假如說f[i][j][k]表示第一堆取了前i本,第二堆取了前j本,第三堆取了前k本的最大體力值,那麼這種狀態的表示對以後是沒有影響的,也就是說滿足了無後效性和最優子結構。

那麼方程就很簡單了,f[i][j][k]從前乙個狀態遞推出來的話只有三種情況:上一步從第1堆取,上一步從第2堆取,上一步從第3堆取。

【**】

#include#include#include#define inf 2100000000

using namespace std;

int i,j,k;

int a[105],b[105],c[105],f[105][105][105];

int main()

printf("%d\n",f[i][j][k]);

}

校內互測 回文詞

大意 給出一篇文章 包括字母非字母以及換行符 判斷長度大於n的回文詞的個數,並將每乙個回文詞輸出 回文中心相同的算乙個,且只輸出最長的 注意 判斷時忽略非字母字元和大小寫,但是輸出時全部輸出 包括換行符 題解 列舉回文中心即可,注意回文詞個數為奇數或是偶數要分別討論,讀入時要注意用getchar把所...

老陳,小石頭

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

6 13校內互測 DP 帶權二分 斜率優化

丘中有麻plant 改自這兒,by zbq。還有隱藏的一頁不放了。直接走下去的話,如果開始時間確定那麼到每個點的時間確定,把time減去dis就可以去掉路程的影響了。這樣對於減去d後的t,如果想要摘一部分,那麼應是取其中最大的t恰好摘它,其它t較小的會早熟然後等著。意會一下吧 所以t大的會對t小的產...