邮票面值设计
对于这一道题目,我们可以采取搜索的手段去枚举每一张邮票,再用动态规划求得最大的连续数值。其中的难点就是如何进行枚举,至于动态规划则仅仅是完全背包的一个简单变形。
搜索:让我们最后输出的总数中要求从小到大按照次序输入,那么我们从小到大枚举即可。我们可以知道,数字1是必须要去的,不然就无法枚举到了数字1;接着,我们就要去枚举了。我们使用递归的参数来记录取的个数take,最大连续和MAX,总和sum。那么新取的数的范围就必然在temp[take]+1~MAX+1(temp记录取的数字)之间,做区间是为了保证有序性,右区间则保证了不会超过MAX+1,不然就无法枚举到这个MAX+1这个值了。枚举完之后,我们就考虑如何得到这个连续值。
DP动态规划:完全背包的简单变形。设f[i]为组成数字i的最小邮票数. f [ j ] = m i n ( f [ j ] , f [ j − t e m p [ i ] ] + 1 ) f[j]=min(f[j],f[j-temp[i]]+1) f[j]=min(f[j],f[j−temp[i]]+1)即数字为j的,取了数字temp[i]就在原来的基础上面+1的情况。但是需要注意,枚举数字的最大范围是sum×n,表示每一件物品都取上限n个。最后的取值最大连续的数字答案ans的表达式为: a