?? pku 1221 凸回文數(shù).txt
字號(hào):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
#define PB push_back
//PKU 1221 凸回文數(shù)
#define NMAX 1000
__int64 f[NMAX][NMAX];//f[i][j],和為i,最外邊邊界的數(shù)字為j時(shí)的個(gè)數(shù)
__int64 cal(int start,int end)
{
int i,j,sum,k;
for(i=start+1;i<=end;i++)
{
for(j=1;j<=i-1;j++)
{
sum=i-2*j;//sum表示除去邊界的數(shù),剩下的數(shù)的和
if(sum<0) f[i][j]=0;
else if(sum==0) f[i][j]=1;
else
{
for(k=j,f[i][j]=0;k<=sum;k++)
//遞歸到和為sum時(shí),這里的k是和為sum的數(shù)的邊界數(shù)
//k要從j(原邊界數(shù))開始,因?yàn)槭峭够匚臄?shù)
f[i][j]+=f[sum][k];
}
}
f[i][i]=1;
for(j=1,f[i][0]=0;j<=i;j++) f[i][0]+=f[i][j];
}
return f[end][0];
}
int main()
{
int ttmax=0,num;
while(1)
{
scanf("%d",&num);
if(num==0) break;
else
{
if(num<=ttmax) printf("%d %I64d\n",num,f[num][0]);
else
{
printf("%d %I64d\n",num,cal(ttmax,num));
ttmax=num;
}
}
}
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -