朴素的完全背包就是总容量一定物品无限能放多少东西,这里记录一下最近遇到的变形取数问题
首先需要说明一下板子的基本情况:
一个数分解为几个数的和的形式有多少种方案数或者最多/最少能分解为多少位?
例1 P1832 A+B Problem(再升级)
胡乱分析
看着像是要搜索但是我感觉搜索应该得tle,这个就是比较朴素的取数问题变形了
首先我们定义v是背包容量,n是[2,n]内有多少个质数这样把质数放进背包的板子就成型了
注意初始值设定dp[0]=1表示什么都不装是有1个的(即这个数本身也算一种)
代码
1 |
|
例2 P1679 神奇的四次方数
胡乱分析
跟例一一模一样注意这里就是把素数换成了四方数把方案数换成了最少的个数同样套板子即可
v是这个数的大小,n是[1,n]内有几个四方数
这里dp[0]=0数本身不算分解的一部分
代码
1 |
|
例3 自然数无序拆分
题目描述(摘自中石油oj 10255)
美羊羊给喜羊羊和沸羊羊出了一道难题,说谁能先做出来,我就奖励给他我自己做的一样礼物。沸羊羊这下可乐了,于是马上答应立刻做出来,喜羊羊见状,当然也不甘示弱,向沸羊羊发起了挑战。
可是这道题目有一些难度,喜羊羊做了一会儿,见沸羊羊也十分头疼,于是就来请教你。
题目是这样的:
把自然数N(N<=100)分解为若干个自然数之和,求出有几种情况。
如N=5时,有7种情况
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5
怎么样?你要加油帮助喜羊羊哦!
胡乱分析
还是典型的问题,这个更简单了。。。实际上就是套板子即可v是n个数n是n个数
注意dp[0]=1代表数本身是算一个的
代码
1 |
|