1 条题解
-
0
递归方程为:dp[n][m]= dp[n][m-1]+ dp[n-m][m-1]
dp[n][m]表示整数 n 的划分中,每个数不大于 m 的划分数。 同样划分情况分为两种情况: a.划分中每个数都小于m,相当于每个数不大于 m-1,划分数为 dp[n][m-1]. b.划分中有一个数为 m.在n中减去m,剩下相当对n-m进行划分,并且每一个数不大于m-1,故划分数为 dp[n-m][m-1] c++代码如下:
#include<bits/stdc++.h> using namespace std; const int N=1e3+10,M=1e9+7; int f[N][N]; int main(){ int n,ans=0;cin>>n; f[1][1]=1; for(int i=2;i<=n;i++){ for(int j=2;j<=i;j++){ f[i][j]=(f[i-1][j-1]+f[i-j][j-1])%M; } } for(int i=1;i<=n;i++){ ans=(ans+f[n][i])%M; } cout<<ans; }
- 1
信息
- ID
- 47
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 6
- 已通过
- 4
- 上传者