hdu 1028 Ignatius and the Princess III(母函数 or dp)
#include <stdio.h>
#define MAXN 122
int y1[MAXN], y2[MAXN];
void init(const int n)
{
int i, j, k;
for(i = 0; i <= n; i++)
{
y1[i] = 1;
y2[i] = 0;
}
for(i = 2; i <= n; i++)
{
for(j = 0; j <= n; j++)
{
for(k = 0; k + j <= n; k += i)
{
y2[k + j] += y1[j];
}
}
for(j = 0; j <= n; j++)
{
y1[j] = y2[j];
y2[j] = 0;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("indata.txt", "r", stdin);
#endif
init(121);
int n;
while(scanf("%d", &n) != EOF) printf("%d\n", y1[n]);
return 0;
}
dp:
#include <stdio.h>
#define MAXN 121
int f[MAXN][MAXN];
void dp(int n)
{
int i, j;
for(i = 0; i <= n; i++)
{
f[i][1] = 1;
f[1][i] = 1;
}
for(i = 2; i <= n; i++)
{
for(j = 2; j <= n; j++)
{
if(i < j) f[i][j] = f[i][i];
else if(i == j) f[i][j] = 1 + f[i][i - 1];
else f[i][j] = f[i - j][j] + f[i][j - 1];
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("indata.txt", "r", stdin);
#endif
dp(120);
int n;
while(scanf("%d", &n) != EOF)
{
printf("%d\n", f[n][n]);
}
return 0;
}
浙公网安备 33010602011771号