|
这个好解。可以用动态规划求解。
如果是:一个组合里的元素不重复的情况的话,代码如下:
#include <stdio.h>
#include <gmp.h>
void f( int Max )
{
int i, j;
mpz_t *list=new mpz_t[ Max+1 ];
for( i=0; i<=Max; ++i )
mpz_init( list[ i ] );
mpz_set_ui( list[ 0 ],1 );
for( i=1; i<=Max; ++i ){
j=Max-i;
while(j>=0)
mpz_add( list[ i+j ],list[ i+j ],list[ j-- ] );
}
mpz_out_str( stdout,10,list[ Max ] );
printf("\n" ;
delete [ ]list;
}
int main( )
{
int n;
scanf("%d",&n);
f( n );
return 1;
}
由于当n=10000时,满足条件的组合个数很多,大大超出了__int64的表示范围,因此,代码中使用了大数运算库GMP,需要GMP的可以发邮件到medie2006@126.com。
n=10000时,
运行结果是:1122606574548038398976040173670530159089991444775125551802871247408332723840 |
|