您的位置:首页 > 其它

POJ 1221 UNIMODAL PALINDROMIC DECOMPOSITIONS【DP】

2014-07-28 01:24 357 查看
DP,要求序列回文且中间个最大,向两边非递增

DP始终还是得靠别人代码 哎

a[ i ] [ j ] 表示组成i的,最左边数是j的结果,那么答案=a[ i ] [ 0 ] +a[ i ] [ 1 ] +...+a[ i ] [ i ]

a[ i ] [ j ] += a[ i - 2 * j ] [ j ] ( i > 2 * j )

a[i][j] += 1 ( i == 2 * j )

#define ll __int64
#include<stdio.h>
#include<string.h>
int main(){
int i,j,k,n;
ll res,a[300][300];
memset(a,0,sizeof(a));
for ( i = 0 ; i < 300 ; i++ )
a[0][i] = a[i][i] = 1 ;
a[1][1] = a[2][1] = a[2][2] = 1 ;

for(i=3;i<300;i++){
for(j=1;j<=i/2;j++){
if(i==2*j)
a[i][j]++;
else
for(k=j;k<=i-2*j;k++){
a[i][j] += a[i-2*j][k];
}
}
}
while(~scanf("%d",&n),n){
res = 0;
for(i=0;i<=n;i++)
res += a
[i];
printf("%d %I64d\n",n,res);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: