组合问题 contest4
1574: 组合问题
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 78 Solved: 23
[Submit][Status][Web Board]
Description
Input
每行2个正整数 n,m(<=31) ,n=0,m=0结束.
Output
输出有多少种取法
Sample Input
2 2
3 3
0 0
Sample Output
3
10
#include<stdio.h>
long long m1[40],m2[40],n,m;
void gf( )
{
for( long long i = 0; i < 40; ++i )
m1[i] = 0,m2[i] = 0;m1[0] = 1;
for( long long i = 1; i <= n; ++i )
{
long long j;
for( j = 0; j <= m;++j )
for( long long k = 0; k + j <= m; k += 1 )
m2[j+k] += m1[j];
for( j = 0; j <= m; ++j )
m1[j] = m2[j],m2[j] = 0;
}
}
int main( )
{
while( scanf( "%ld%ld",&n,&m ) ,n |m )
{
gf( );
if( m == 0 || n == 0 )
puts( "0" );
else
printf( "%ld\n",m1[m] );
}
return 0;
}
/**************************************************************
Problem: 1574
User: HUT_TEAM1
Language: C++
Result: Accepted
Time:4 ms
Memory:888 kb
****************************************************************/
posted on 2011-08-04 07:43 more think, more gains 阅读(154) 评论(0) 编辑 收藏 举报