ZOJ 1353 Unimodal Palindromic Decompositions

 

设当前的总和为i,最外层的数字为j,把最外层“剥去”后,剩下依然是满足要求的数列,且总和为i-2j,最外层的数字>=j。

即为:F(i,j)=∑F(i-2j,k)

 

#include  < cstdio >
#include 
< string >

int  N;
double  f[ 300 ][ 300 ];

void  dp ();
void  pt ();
void  print ();

int  main ()
{
    dp ();
    
//pt ();
    
//freopen ( "in.txt", "r", stdin );
    while ( scanf ( "%d"&N ) && N )
    
{
        print ();
    }

    
return 0;
}


void  dp ()
{
    
int i, j, k;
    memset ( f, 
0sizeof ( f ) );
    
for ( i = 1; i <= 250; i ++ )
    
{
        f[i][i] 
= 1;
        
for ( j = 1; j <= i / 2; j ++ )
        
{
            f[i][j] 
= 0;
            
if ( j * 2 == i )
                f[i][j] 
= 1;
            
for ( k = j; k <= i - 2 * j; k ++ )
            
{
                f[i][j] 
+= f[i - 2 * j][k];
            }

        }

    }

}


void  print ()
{
    
int i;
    
double ans = 0;
    
for ( i = 1; i <= N; i ++ )
    
{
        ans 
+= f[N][i];
    }

    printf ( 
"%d %.0f ", N, ans );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值