AcWing 900. 整数划分
原题链接
简单
作者:
Acvv_scl
,
2021-03-16 18:58:03
,
所有人可见
,
阅读 217
推到过程
- 状态表达式 f[i][j] 表示 1~i中选出总体积是j的数量;
- 状态计算:f[i][j]=f[i-1][j]+f[i-1][j-i]+f[i][j-2i]+…+f[i-1][j-ki];
- 由2 : f[i][j-i]= +f[i-1][j-i]+f[i][j-2i]+....f[i-1][j-ki];
- 由2与3 得 f[i][j]=f[i-1][j]+f[i][j-i];
- 用完全背包的优化思路 转化为一维:f[j]=f[j]+f[j-i];
import java.util.*;
public class Main{
static int N=1010;
static int mode=(int)(1e9+7);
static int []f=new int [N];
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
f[0]=1;
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
f[j]=(f[j]+f[j-i])%mode;
}
}
System.out.println(f[n]);
}
}