⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1187.txt

📁 北大ACM题目例程 详细的解答过程 程序实现 算法分析
💻 TXT
字号:

#include <stdio.h>

int s[31][11][11][11];

int get( int d, int l1, int l2, int l3 )
{
    int t, j, k, i, h;
    
    if( l1 == 0 && l2 == 0 && l3 == 0 && d >= 0 )
    	return 1;
	
 	if( d <= 0 )
    	return 0;
    	
	if( ( t = s[d][l1][l2][l3] ) >= 0 )
		return t;
		
	t = 0;
	
	if( d == 1 )
	{
	    if( l1 ) t += get( d, l1-1, l2, l3 );
	    if( l2 ) t += get( d, l1, l2-1, l3 );
	    if( l3 ) t += get( d, l1, l2, l3-1 );
     	
     	t %= 11380;
      	s[d][l1][l2][l3] =  t;
	    return t ;
	}    
	
 	for( i=0; i<=l1-1; i++ )
	for( j=0; j<=l2; j++ )
 	for( k=0; k<=l3; k++ )
  	{
       	t += ( get( d-1, i, j, k ) * get( d, l1-1-i, l2-j, l3-k ) );
        if( t > ( 1 << 30 ) ) t %= 11380;
    }    
  	
	for( j=0; j<=l2-1; j++ )
	for( k=0; k<=l3; k++ )
	{
     	t += ( get( d-1, 0, j, k ) * get( d, l1, l2-1-j, l3-k ) );
 	 	if( t > ( 1 << 30 ) ) t %= 11380;
   	}  	 
	
	for( k=0; k<=l3-1; k++ )
	{
     	t += ( get( d-1, 0, 0, k ) * get( d, l1, l2, l3-1-k ) );
 	 	if( t > ( 1 << 30 ) ) t %= 11380;
   	}  	 

	t %= 11380;
	s[d][l1][l2][l3] = t;
	
	return t;
}

int main()
{
    int d, l1, l2, l3, i, j, k, l;
    
 	scanf( "%d %d %d %d", &l1, &l2, &l3, &d );
 	
 	for( l=0; l<=d; l++ )
 	for( i=0; i<=l1; i++ )
 	for( j=0; j<=l2; j++ )
 	for( k=0; k<=l3; k++ )
 		s[l][i][j][k] = -1;
 		
	printf( "%d\n", ( get( d, l1, l2, l3 ) - get( d-1, l1, l2, l3 ) + 11380 ) % 11380 );
	
	return 0;
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -