摘要:
http://poj.org/problem?id=2392 背包没有容量,对于每种木块,其能达到的最大高度a便可做为其容量。先用二进制优化减少数量,然后根据a的值排序,01背包时可以以每种木块可达到的最大高度为最大容量。RE一次,因为val的大小只开了401...这里是个易错点啊,二进制优化后的数量不确定。代码:#include<cstdio>#include<cstring>#include<cstdlib>#defineMax(a,b)a>b?a:bintdp[40005];structBlock{inth;inta;}val[4001];int 阅读全文
摘要:
http://poj.org/problem?id=1276 有一个Cash Machine,里面装有t种面值为n[i]的货币,每种有v[i]张。问在所换金额不超过cash元钱的情况下,所能换取的最大金额。 多重背包,转换成01背包来做,其中要用到二进制优化。《背包九讲》上讲的挺不错,在每件物品价值前加上系数,并保证这些系数的组合包括1..n的所有数且总和为n。代码:#include<cstdio>#include<cstring>#defineMax(a,b)a>b?a:bintdp[100005];intval[105];intmain(){intcash,n 阅读全文