首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

ZOJ Monthly 2011年10月賽題解(DP與數學專場)

     編輯:關於C++

這場比賽題目質量極高,涵蓋動態規劃、數學期望、幾何優化、組合數學等,現逐題總結。

ZOJ 3549 Little Keng

題意:計算 1^n + 2^n + ... + m^n 末尾 0 的個數。解法:數據範圍小,直接暴力大整數加法+取模 10 計數。

ZOJ 3550 Big Keng

題意:圓柱+圓台組合體,體積固定 V,求最小表面積。解法:三分法雙層巢狀——外層三分上下體積分配,內層三分半徑比例。注意 eps=1e-5 不要寫錯成負數。

ZOJ 3551 BloodSucker

題意:n-1 人 + 1 吸血鬼,每天隨機兩人相遇,人遇吸血鬼以概率 p 變吸血鬼,求全變為吸血鬼的期望天數。解法:

  • 數學期望公式推導:狀態 i 為當前吸血鬼數,推導遞推公式。
  • 概率 DP:dp[i] 表示從 i 隻吸血鬼到 n 隻的期望天數。dp[n]=0,逆推 dp[i] = (dp[i+1]*p1 + 1)/p1,其中 p1 = i*(n-i)/C(n,2) * p 為轉移概率。

ZOJ 3554 A Miser Boss

題意:三台車床分工,要求總工作時間相等,求最短完成時間。解法:三維 DP dp[i][j][k] 表示三機器能否分別工作 i,j,k 秒。狀態轉移枚舉每個任務分配給三機器之一,用 vis 區分上一輪狀態避免重複使用任務。最後找 dp[t][t][t]=true 的最小 t。

ZOJ 3556 How Many Sets I

題意:集合 S 大小 n,求有序 k 元組 (S1,...,Sk) 使得交集為空。解法:每個元素獨立選擇屬於哪些子集(至少缺一個),共 (2^k - 1)^n 種。快速冪取模。

ZOJ 3557 How Many Sets II

題意:從 n 個元素選 m 個,無相鄰,方案數模 p (p 不一定是質數)。解法:插板法得組合數 C(n-m+1, m)。因 p 非質數,用 Lucas 定理分解模質因子再 CRT 合併,或直接用遞推 C(a,b) = C(a-1,b) + C(a-1,b-1) 配合質因子分解計算。

心得

這套題展示了競賽中「識別模型、套用模板、處理邊界」的完整流程。數學期望與概率 DP 互補,三分法解決非凸優化,狀態壓縮 DP 處理多維約束,組合數學靈活變換。重溫極有價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved