博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
How do you add?(递推)
阅读量:5133 次
发布时间:2019-06-13

本文共 913 字,大约阅读时间需要 3 分钟。

题意:求将n分为k个数相加的种数。

如:n=20,k=2,则可分为:

0+20=20

1+19=20

2+18=20

.......

20 +0=20

共21种方案。

解析:令f(n,m)表示将n分为m个数相加的种数,则 f(n,m)=  ∑ f(n-i,m-1)   (0 ≤ i ≤n)

 

代码如下:

1 # include
2 # include
3 # include
4 # include
5 # include
6 using namespace std; 7 const int mod=1000000; 8 int a[105][105];///a[i][j]表示把i分为j个数的方法个数; 9 int main()10 {11 int i,j,l,n,k;12 memset(a,0,sizeof(a));13 for(i=0;i<=100;++i)14 a[i][1]=a[0][i]=1;15 for(i=1;i<=100;++i){16 for(k=2;k<=100;++k){17 for(l=0;l<=i;++l){18 a[i][k]+=a[i-l][k-1];19 a[i][k]%=mod;20 }21 }22 }23 while(scanf("%d%d",&n,&k),n+k)24 {25 printf("%d\n",a[n][k]);26 }27 return 0;28 }

 这道题和 如出一辙

 或是

转载于:https://www.cnblogs.com/20143605--pcx/p/4677132.html

你可能感兴趣的文章
类间关系总结
查看>>
properties配置文件读写,追加
查看>>
Linux环境下MySql安装和常见问题的解决
查看>>
lrzsz——一款好用的文件互传工具
查看>>
ZPL语言完成条形码的打印
查看>>
这20件事千万不要对自己做!
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
玩转小程序之文件读写
查看>>
HashPump用法
查看>>
cuda基础
查看>>
virutalenv一次行安装多个requirements里的文件
查看>>
Vue安装准备工作
查看>>
.NET 母版页 讲解
查看>>
Android Bitmap 和 Canvas详解
查看>>
最大权闭合子图
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
导入导出数据库和导入导出数据库表
查看>>
linux下操作mysql
查看>>
【03月04日】A股滚动市盈率PE历史新低排名
查看>>