HDU - 2082 找單詞 生成函式
阿新 • • 發佈:2020-08-18
每個字母都有價值,A的價值是1,B的價值是2,Z的價值是26。現給定26個字母的數量,問能湊到總價值<=50的單詞的方案數是多少。
注意HDU , UDH屬於相同的單詞。
形式上,普通型母函式用於解決多重集的組合問題,
指數型母函式用於解決多重集的排列問題。
此題用普通型母函式求解。
構造母函式
於是遍歷的過程中注意以下k <= x && (j + k * i ) <= 50 即可。
最後對c1[1 -50] 累加就是答案。
ll c1[55], c2[55]; int main() { int T = readint(); while (T--) { memset(c1,0, sizeof c1); memset(c2, 0, sizeof c2); c1[0] = 1ll; int x; for (int i = 1; i <= 26; i++) { x = readint(); for (int j = 0; j <= 50; j++) for (int k = 0; k <= x && (j + k * i) <= 50; k++) c2[j + k * i] += c1[j];for (int j = 0; j <= 50; j++) c1[j] = c2[j], c2[j] = 0; } ll res = 0; for (int i = 1; i <= 50; i++) res += c1[i]; Put(res); puts(""); } }