#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <string> using namespace std; #define N 500 __int64 opt[N+1][N+1]; //状态转移: f[i][j]为数i由最小元素为j的单峰回文组成. //则有: f[i][j] = f[i][j+1] + f[i-2*j][j] (i-2*j>=j, i-2*j == 0) //不说具体了, 你懂的. int main() { for(int i = 1; i <= N; ++i) opt[i][i] = 1; for(int i = 2; i <= N; ++i) for(int j = i-1; j >= 1; --j) { opt[i][j] = opt[i][j+1]; if(i-2*j >= j) opt[i][j] += opt[i-2*j][j]; else if(i-2*j == 0) opt[i][j] += 1; } int n; while(scanf("%d", &n) && n) printf("%d %I64d/n", n, opt[n][1]); return 0; }