多重背包问题 的 O(VN)的算法_曙光_新浪博客



多重背包问题 的 O(VN)的算法_曙光_新浪博客

最近在看 dd_engi的背包九讲,于是也上poj找点背包问题的题目来做,于是找到了poj1742_coin
http://acm.pku.edu.cn/JudgeOnline/problem?id=1742

题意就是有若干种硬币,每种硬币数量有限。求可以组合出多少面值?

然后根据《背包九讲》,这就是个经典的多重背包问题了,然后就先写基本算法:
第i种硬币面值是a[i],数量是c[i],就把这题转换成有(c[0]+...+c[i]+...+c[n])个物品的0-1背包问题于是时间复杂度O(n*m*c),然后这种算法TLE

于是回头继续读《背包九讲》,将背包按照二进制分解,例如某个物品,c[i]=13,就将这种物品分别分成 价值分别为 1*a[i],2*a[i],4*a[i],6*a[i]  的四件物品,于是时间复杂度优化到O(n*m*logc),结果竟然还是TLE……

再次读《背包九讲》:“多重背包问题同样有O(VN)的算法。......由于用单调队列优化的DP已超出了NOIP的范围,故本文不再展开讲解。"于是开始四处搜索解题报告,找到了“楼教主”的有关文章,还是读不懂,无奈只好直接找别人的代码来学习,这才明白一点:

将这个 多重背包问题 转化为 完全背包问题,也就是每个物品都有无限个,但是在循环过程中用一个数组记录 :某种硬币i使用的次数,如果使用次数超过c[i],则停止循环。恩,大意如此,时间复杂度就是O(n*m),终于AC。

不过楼教主的***bit***方法还是不懂,最后说一句:做男人真不容易

Read full article from 多重背包问题 的 O(VN)的算法_曙光_新浪博客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts