Wannafly挑戰賽16 D 打怪(DP)

2021-08-20 06:44:04 字數 1690 閱讀 2027

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

有a種**,b種屬性,和c種怪物。對於第k種怪物,給出**i和屬性j的搭配在乙個單位時間內對其造成的傷害h

k,i,j。已知一開始使用**i,需要時間x

i,使用屬性i,需要時間y

i。然後從**i直接切換成**j,需要時間f

i,j,從屬性i直接切換成屬性j需要時間g

i,j。有乙個長度為n的怪物序列,給出怪物i的血量w

i和種類t

i,在打怪物的時候可以隨意切換**和屬性,問按順序打死所有怪物(使得血量<=0)至少需要多少時間。

給出四個整數a,b,c,n (1 <= a,b,n <= 100, 1 <= c <= 20)

接下來一行給出a個數字表示xi    (1 <= xi

<= 1e5)

接下來一行給出b個數字表示yi    (1 <= yi

<= 1e5)

接下來a行每行a個整數,表示fi,j    (fi,i = 0, 當i!=j時,1 <= fi,j

<= 1e3)

接下來b行每行b個整數,表示gi,j  (gi,i = 0, 當i!=j時,1 <= gi,j

<= 1e3)

接下來c個矩陣,每個矩陣有a行,每行b個整數,表示hk,i,j (1 <= hk,i,j

<= 1e4)

接下來一行讀入n個整數表示wi (1 <= wi

<= 1e8)

接下來一行讀入n個整數表示ti (1 <= ti

<= c)

輸出乙個整數表示答案。

示例1複製

2 2 1 1

1 100

1 100

0 10

5 00 7

6 02 3

4 51001

1

複製

220

題解:設狀態為d[i][j][k],表示處理完第i只怪,**是j,屬性是k的最短時間。**/屬性的切換只需在打每只怪之前考慮。轉移的時候,分別考慮**,屬性的轉換即可。 由於**/屬性的轉換是乙個有向圖,間接切換可能比直接切換更優,所以一開始要跑floyd求最短路。

#includeusing namespace std;

const int max=1e5+10;

const int mod=1e9+7;

const double pi=acos(-1.0);

typedef long long ll;

ll x[200],y[200];

ll f[200][200],g[200][200];

ll h[30][200][200];

ll w[200],t[200];

ll d[101][101][101];

void floyd(ll p[200],int n)

}}int main()

ll ans=6e18;

for(int i=1;i<=a;i++)

for(int j=1;j<=b;j++)ans=min(ans,d[n][i][j]);

cout<

Wannafly挑戰賽6 D 鎖

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 106號房間共有n名居民,他們每人有乙個重要度。房間的門上可以裝若干把鎖。假設共有k把鎖,命名為1到k。每把鎖有一種對應的鑰匙,也用1到k表示。鑰匙可以複...

Wannafly挑戰賽16 C 小球碰撞

標籤 數學 逆元 乙個彈球 可視為質點 被水平丟擲,落地時發生完全彈性碰撞,設彈球第一次落地位置為x,則第i次落地位置為 2i 1 x.若彈球第一次落地的位置在區間 l,r 均勻隨機分布,求彈球落在區間 l,r 內的總次數的數學期望值 可以證明答案為有理數,若答案表示為最簡分數為a b,則存在c使得...

Wannafly挑戰賽20 D挑選隊友

d 挑選隊友 進入討論 77 304 通過輸入包括兩行 第一行包括三個數n,m,k,表示共有n位選手,m個群,需要有k名選手被選擇 第二行包括m個數,第i個數表示第i個群有si個選手 n 100000,m k n 輸出包括一行 第一行輸出方案數 由於輸出可能比較大,你只需要輸出在模998244353...