1 条题解
-
0
C++ :
#include<iostream> using namespace std; int dp[210][16]; int main() { int n,k; cin>>n>>k; for(int i=1;i<=n;i++) dp[i][1]=1;//分成一份的时候只有一种情况 for(int i=1;i<=n;i++) for(int j=2;j<=k;j++)//分成一份的时候跳过,从2开始 { if(i>=j)dp[i][j]=dp[i-j][j]+dp[i-1][j-1]; /*k>n情况数肯定是0; 当 i>=j时,缩小规模,分成两类讨论: 1.当至少有一个等于一,我们便可以缩小它的规模, 变成研究,dp[i-1][j-1]的情况数; 2. 当所有的都大于等于2,实际上也就等于每一份里面减去一个一, 而份数不变的情况dp[i-j][j] */ } cout<<dp[n][k]<<endl; }
Python :
n,k = map(int,input().split()) dp = [[0 for i in range(k+1)] for j in range(n+1)] for i in range(1,n+1): dp[i][1] = 1 if k >= 2: dp[i][2] = i//2 if i <= k: dp[i][i] = 1 for i in range(4,n+1): for j in range(3,k+1): if i > j: dp[i][j] = dp[i-1][j-1] + dp[i-j][j] print(dp[n][k])
- 1
信息
- ID
- 2727
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者