//hdu 1028 Ignatius and the Princess III(一个数加法有几种)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M = 129;
long long df[M][M];
//============================
/*
df[i][j]二维数组数组i存取所要得的数据,j是j公式加法中最大的一个加数值
比如n=4,i=4等式的值
M有可能为1,2,3,4
df[4][1]=1 --> 4=1+1+1+1;
df[4][2]=df[2][2]+df[4][1] =3--> 4= 1+1+1+1;4=2+1+1;4=2+2;
df[4][3]=df[1][1]+df[4][2]=4 -->4= 1+1+1+1;4=2+1+1;4=2+2;4=3+1;
df[4][4]=df[0][0]+df[4][3]=5 -->4= 1+1+1+1;4=2+1+1;4=2+2;4=3+1;4=4;
注意:if(j>i-j) df[i][j] = df[i - j][i-j] + df[i][j-1];
else df[i][j] = df[i - j][j] + df[i][j-1];
*/
//============================
void init()
{
int i, j, temp;
df[0][0] = 1;
for (int i = 1; i < M; ++i)
df[i][1] = 1;
for (int i = 2; i < M; ++i)
for (int j = 2; j <= i; ++j) {
if (j > i - j)
temp = i-j;
else
temp = j;
df[i][j] = df[i - j][temp] + df[i][j-1];
}
}
//=============================
int main()
{
init();
int n;
while (scanf("%d", &n) ==1) {
printf("%lld\n", df[n][n]);
}
return 0;
}
hdu 1028 Ignatius and the Princess III(一个数加法有几种)
最新推荐文章于 2022-06-17 18:04:10 发布