poj 2279 Mr. Young's Picture Permutations

果的钩子公式http://en.wikipedia.org/wiki/Young_tableau

黑书上也有的,最后在算的时候避免存不下,需要优化下。
#include <stdio.h>
#include 
<string.h>

int temp[20][50], up[50], down[50], num[20];
int n, m;

int gcd(int a, int b)
{
    
return (b == 0? a : gcd(b, a%b);
}

int main()
{
    
while ( scanf("%d"&m), m )
    {
        memset(temp, 
0sizeof(temp));
        
int i, j, k, n= 0, len= 0;
        
for ( i = 0 ; i < m ; i++ )
        {
            scanf(
"%d", num+i);
            n
+=num[i];
            
for ( j = 0 ; j < num[i] ; j++ )
                temp[i][j]
=1;
        }
        
for ( i = 0 ; i < 20; i++ )
            
for ( j = 0 ; j < 50 && temp[i][j]; j++ )
            {
                
int sum=-1;
                
for ( k = i ; k < 20 ; k++ )
                    sum
+=temp[k][j];
                
for ( k = j ; k < 50 ; k++ )
                    sum
+=temp[i][k];
                
if ( 0 < sum ) down[len++]= sum;
            }
        
for ( i = 0 ; i < n ; i++ ) up[i]= i+1;
        
for ( i = 0 ; i < n ; i++ )
            
for ( j = 0 ; j < n ; j++ )
            {
                k 
= gcd(up[i], down[j]);
                up[i]
/=k;
                down[j]
/=k;
            }
        __int64 ans
= 1;
        
for ( i = 0 ; i < n ; i++ )
            ans
*=up[i];
        printf(
"%I64d\n", ans);
    }
    
return 0;
}

posted on 2011-08-17 00:37 purplest 阅读(420) 评论(0)  编辑 收藏 引用 所属分类: 数论


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

随笔分类(70)

随笔档案(68)

ACMer

搜索

最新随笔

最新评论