時間限制: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...