恐狼後衛題解

2021-08-20 03:47:10 字數 1233 閱讀 5028

著名卡牌遊戲《石爐傳說》中有一張隨從牌:恐狼後衛。恐狼後衛的能力是使得相鄰隨從的攻擊力提高。

現在有n張恐狼後衛順序排成一排,第i只恐狼後衛的攻擊力為ai,血量為hi,提公升相鄰隨從的攻擊力值為bi。你的攻擊力為atk,每次攻擊你可以選擇乙隻存活的恐狼後衛,減少其血量值atk。若其血量小於等於0,則該恐狼後衛死亡。當某只恐狼後衛死亡時,其左右兩側(若存在)的恐狼後衛會靠攏並成為相鄰關係。在攻擊第i只恐狼後衛時,除了要承受這只恐狼後衛自身的攻擊力ai之外,還要承受與其相鄰的2張恐狼後衛的提高攻擊力值bi−1和bi+1(若存在)。

你的任務是承受最少的總傷害殺死所有恐狼後衛,輸出需承受的傷害值。

輸入格式

第一行乙個正整數n,表示恐狼後衛的數量。

第二行乙個正整數atk,表示你的攻擊力。

以下n行,每行3個值:ai、bi、hi,分別表示第i只恐狼後衛自身的攻擊力值、提公升相鄰隨從的攻擊力值、血量值。

輸出格式

乙個整數,表示殺死所有恐狼後衛需要承受的最少傷害值。

樣例輸入

3 1

8 1 6

3 5 7

4 9 2

樣例輸出

94資料規模與約定

對於30%的資料,n≤10

對於另外30%的資料,n≤100,hi=1

對於100%的資料,n≤400,atk,ai,bi,hi≤1000

首先吐槽下恐狼後衛好像是爐石傳說中的,而不是石爐傳說中的,233,然後看題,第一眼感覺不可做,不可做要做呀,分析後覺得這是道區間dp,設左端點為j,右端點為i+j,中間隨意一點為k,代價設為al,可知al[i][j]=min,所以用三層迴圈,分別為i,j,k(注意i在最外層),可列狀態轉移方程al[j][j+i]=min(al[j][j+i],al[j][k-1]+al[k+1][j+i]+ (a[k]+b[j-1]+b[j+i+1])*(h[k]/atk+1));

#include

#include

#include

#include

using namespace std;

int a[405],b[405],h[405],al[405][405],n,atk;

int main()}}

printf("%d\n",al[1][n]);

return 0;

}

題解 ZJOI2009 狼和羊的故事

題目戳我 text 顯然思路,把所有羊看成乙個源點,所有狼看成乙個匯點,格仔之間連容量為 1 的邊,直接跑最小割。技巧 這題收穫 注意到無限邊在最小割中特殊的意義。includeusing namespace std define int long long const int maxn 5e5 1...