俊哲是个很会钻研的小帅哥,最近他一直在钻研各类背包问题,因为背包问题不管是CSP入门级还是提高级,都会涉及。有道是:搞定背包,段位又升一级。那么你对背包问题,研究透了吗?下面来一道关于背包的完善程序题,考考你。
有一个质量上限为m的背包和n个物品,物品分三类,第一类物品有取的数量限制,第二类物品只能取一个,第三类物品可以无限取。
第i个物品的类别为tp[i] (取值范围为[1,3]),质量为w[i], 价值为c[i],如果tp[i]=1,还会有一个a[i]表示这种物品最多只能取a[i]个。
求这个背包可以装下的最大价值。
M<=1000, n<=100, c[i]<=1000, a[i]<=10, 1<=tp[i]<=3。
请补全程序。