BZOJ1806 礦工配餐

2022-07-16 19:06:15 字數 925 閱讀 4189

也是一道不錯的題目呢!bzoj上面的題的確很好呢,可惜我到現在才開始刷。不可以再把暴力+騙分盡量拿省一然後就投入文化課作為目標了,一是因為運氣不一定那麼好,二是我又重新發現了oi的美。如果這次可以拿到省一,我決定和之前那位大神一樣,停課準備省選,哪怕這很難。

此題又涉及dp狀態設計的另乙個技巧,或者說要求,當發現目前的狀態無法進行轉移,即缺少轉移所必要的條件時,就可以增加狀態的維數,記錄更多的資訊。一開始,我們可以設dp[i]表示考慮完第i輛車最大的產煤量,顯然無法進行轉移,因為對於第i+1輛車,我們不知道他去哪個礦會提供多少價值,因此我們可以將狀態改為dp[i][a][b][c][d]表示考慮完第i輛車,1號礦(假設的)的倒數第2輛為a,倒數第1輛為b,2號礦則分別是c和d,設第i輛車為food,則有dp[i][b][food][c][d]=max(dp[i][b][food][c][d],dp[i-1][a][b][c][d]+cnt)和dp[i][a][b][d][food]=max(dp[i][a][b][d][food],dp[i-1][a][b][c][d]+cnt),也就是分別討論第i輛車去哪個礦,其中cnt是第i輛車帶來的價值。

1 #include 2 #include 3 #include 4

5using

namespace

std;67

const

int maxn = 1e5 + 5;8

9int dp[2][4][4][4][4

];10

char

s[maxn];

1112 inline int diff(int a, int b, int

f) 18

19int

main() 39}

40 printf("%d"

, ans);

41return0;

42 }

ac**

BZOJ 1806 樹分塊 模板題

time limit 10 sec memory limit 162 mbsec special judge submit 2685 solved 1635 submit status discuss 餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成 員...

bzoj1806 DP Miners 礦工配餐

description input 輸入的第一行包含乙個整數n 1 n 100 000 表示食品車的數目。第二行包含乙個由n個字元組成的字串,按照配送順序依次表示食品車配送的食品的型別。每個字元是以下三個大寫字母之一 m 表示肉類 f 表示魚類 或 b 表示麵包 output 輸出乙個整數,表示最大...

IOI2007 D1T1 Miners 礦工配餐

題目大意 有 2 個煤礦,n 天。每天給乙個煤礦送餐 共有有 3 種餐 價值為它與前面兩次送餐 如果有的話 不同的種類數。最大化價值。題解 看到只有三種餐,考慮狀壓 dp f 表示現在是第 i 天,第乙個煤礦上一次為 j 再上一次為 k 沒有為 0 l,m 同理。calc a,b,c 為求出這三個數...