1. 程式人生 > 其它 >2021.6.8模擬賽

2021.6.8模擬賽

T1打包

一個二維01揹包的板子,狀態轉移方程$$Dp_{j,k}=max\left \{Dp_{j,k},Dp_{j-Weight_i,k-V_i}+Value_i\right \}$$

T2暗黑破壞神

大概類似於分組揹包,開$long\ long$,在更新$Dp$的過程中記錄路徑,遞迴輸出即可。同時可能會有$Dp$陣列有重複的地方,需要當$Dp_{n,P}=Dp_{n,P-1}$時,令$P-1$即可,最後$Print(n,P)$狀態轉移方程:$$Dp_{i,j}=max\left \{Dp_{i,k},Dp_{i-1,j-k\times p_i.c}+p_i.w_k\right \}$$

inline void
Print(int k , int Left) { if(k == 0) return; _Print(k - 1 , Left - Number[k][Left] * p[k].c); Write(num[k][Left]) , Enter; } inline void _Print(int k) { for(int i = 1; i <= m; i++) Write(Dp[k][i]) , Space; Enter; }

T3科技莊園

類似於01揹包,注意要二進位制優化,陣列要開大,狀態轉移方程$$Dp_j=max\left \{Dp_j,Dp_{j-Weight_i}+Value_i\right \}$$

T4金明的預算方案

無他,惟挨個er特判是否為主件附件耳,狀態轉移方程$$Dp_j=max\left \{Dp_j,Dp_{j-Weight_i}+Value_i\right \}\\Dp_j=max\left \{Dp_j,Dp_{j-\underline{ }Weight_{i,1}}+Value_i+\underline{ }Value_{i,1}\right \}\\Dp_j=max\left \{Dp_j,Dp_{j-\underline{ }Weight_{i,2}}+Value_i+\underline{ }Value_{i,2}\right \}\\Dp_j=max\left \{Dp_j,Dp_{j-\underline{ }Weight_{i,1}-\underline{ }Weight_{i,2}}+Value_i+\underline{ }Value_{i,1}+\underline{ }Value_{i,2}\right \}$$