对于给定了背包容量,物品费用,物品间的相互关系(分组,依赖)等

的背包问题,除了给定每个物品的价值后求得的最大价值外,还可以得到装满背包或将背包装置某一指定容量的方案总数

对于这类问题,一般只需要将状态转移方程中的max改成sum即可

如果\(j<=V_i\) 则第i件物品一件也放不进去,\(f_{[i,j]}=f_{[i-1,j]}\)

如果\(j>=V_i\) 则第i件物品能放进去一个,\(f_{[i,j]}=f_{[i-1,j]}+f_{[i,j-v[i]]}\),第i件物品一个都不放的情况下填满容量为j的背包的方案总数,加上第i件物品至少放一个的情况下填满容量为j的背包的方案总数

边界:\(f_{[0,i]}=0,f_{[0,0]}=1\)

目标:\(f_{[n,m]}\)

题目1

题目描述 Description

给出n枚邮票的面额,c1 c2 … cn,每枚邮票可以最多使用1次。试求出这n个不同面额的邮票最多能连续组成的最大面额是多大。例如1分,2分和3分的邮票,可以最多组成到1分到6分之间的所有面额,其它面额是无法组成的。

输入描述 Input Description

第一行,一个正整数n

第二行,n个空格隔开的正整数,c1 c2 c3 … cn

输出描述 Output Description

最大能连续组成的面额

样例输入 Sample Input

3

1 2 3

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

n<=30, ci <=100

定义:f[i]表示金额i是否可以组成

动态转移方程:\(f_j|=f_{j-v[i]}\)


ICtiger's Blog 求关注 $e^{ix}=cosx+isinx$