现在的位置: 首页 > 综合 > 正文

ZOJ 1353 Unimodal Palindromic Decompositions

2019年04月15日 ⁄ 综合 ⁄ 共 872字 ⁄ 字号 评论关闭
 

设当前的总和为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 );
}

抱歉!评论已关闭.