文章
12
粉丝
0
获赞
123
访问
2.7k
分为两种情况 苹果多 或 盘子不小于苹果,当苹果多的时候 考虑为盘子少一个的时候(即空出一个盘子)的方案数加上在每个都先放一个苹果之后的方案数(即盘子数不变 苹果数减n)当盘子多于苹果时 必定有空盘子 忽略空盘子(即极限情况下一个盘子放一个苹果 最多有m个盘子被放了苹果 所以 方案数就等于dp(mm)) 当没苹果或者有一个苹果的时候 就只有这么一个方案 返回1
#include <stdio.h>
int dp(int m, int n) {
if (m == 0 || n == 1) return 1;
if (m < n) return dp(m, m);
return dp(m, n-1) + dp(m-n, n);
}
int main(){
int m,n;
while(scanf("%d %d",&m,&n)==2){
printf("%d\n",dp(m,n));
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发