首页 > 其他 > 详细

数论 UVA 10943

时间:2015-01-15 19:51:37      阅读:433      评论:0      收藏:0      [点我收藏+]

这是一道关于组合数和隔板法的数论题目。题目说的是选出k个不同且不大于N的数字进行相加,要求这些数字之和等于N,结果要求输出这样的数有多少组。这里可以将问题利用隔板法来转换,那么题目的叙述可以转换成:这里有N个相同的小球,要求放到k个相同的盒子中,盒子可以为空,但一定要把所有球都放进盒子中,问共有多少种放法。经过题目描述的转换,这道题目就可以运用隔板法的公式:所有符合条件的情况的种数为c[N+k-1][k-1]。

由组合数的公式可得c[m][n]=c[m-1][n-1]+c[m-1][n]。由于这道题目的N、k的范围都在100以内,所以可以先打表再对应查找。

#include<stdio.h>
#include<string.h>
int c[200][200];
int main()
{
int i,j;
memset(c,0,sizeof(c));
for(i=0;i<200;i++)
c[i][0]=1;
for(i=1;i<200;i++)
for(j=1;j<=i;j++)
{
c[i][j]=(c[i-1][j]+c[i-1][j-1])%1000000;
}
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==0&&k==0)
break;
printf("%d\n",c[n+k-1][k-1]);
}
return 0;
}

数论 UVA 10943

原文:http://www.cnblogs.com/hbutACMER/p/4227094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!