1.自然数拆分
https://www.acwing.com/problem/content/description/281/
样例:
输入:7
=1+6、2+5、3+4、1+1+5、1+2+4、1+3+3、2+2+3、1+1+1+4、1+1+2+3、1+2+2+2、1+1+1+1+3、1+1+1+2+2、1+1+1+1+1+2、1+1+1+1+1+1+1
输出:14
题意理解:
背包容量:N
N-1个物品:1 ~ N-1
背包类型:完全背包
y式DP分析法:
状态表示:f(i,j):所有从前i个物品中选,且体积恰好是j的方案
f[i][j]:从前i个数字中选,和为j的方案
状态计算:f(i,j)=f(i-1,j)+f(i,j-a[i])
//Memory Limit Exceeded 二维数组,空间复杂度过高
for(int i=1;i<=n;i++)
f[i][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(j-i>=0)
f[i][j]=f[i-1][j]+f[i][j-i];
else
f[i][j]=f[i-1][j];
}
//AC 一维数组
f[0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(j-i>=0)
f[j]+=f[j-i];
}
2.数字组合
https://www.acwing.com/problem/content/280/
题意理解:
背包类型:0-1背包
3.整数划分
https://www.acwing.com/problem/content/902/
题意理解:
背包类型:完全背包