天天看點

【POJ 1742】Coins【DP】【多重背包】

題目連結:http://poj.org/problem?id=1742

有nnn種面值不同的硬币,每種有c[i]c[i]c[i]個。求1到mmm有多少面值可以用這些硬币湊成?

很明顯的完全背包。。。

【POJ 1742】Coins【DP】【多重背包】
【POJ 1742】Coins【DP】【多重背包】
【POJ 1742】Coins【DP】【多重背包】

前面WA,TLE,RE,CEWA,TLE,RE,CEWA,TLE,RE,CE全是用二進制拆分做的。。。後來實在沒辦法打了書上的方法。

設f[i]f[i]f[i]為面值為iii可否得到。那麼最基本的O(tnm2)O(tnm^2)O(tnm2)肯定是過不了的。需要優化。

設used[i]used[i]used[i]表示面值湊到iii的最小硬币使用數,那麼我們就可以省掉一重循環,因為,可以用usedusedused來進行最小答案的判斷。

最終答案為∑i=1nf[i]\sum^{n}_{i=1}f[i]∑i=1n​f[i]

時間複雜度:O(tnm)O(tnm)O(tnm)