搜一下:求解,这个马鞍面到底是怎么来的,求大神仔细讲解// 问题的分析,上面的热心网友说得很清楚。// 算法采用动态规划#include#define N 1000typedef long long TYPE;TYPE gx(TYPE m, TYPE n){ TYPE tmp; while(tmp=m%n) { m = n; n = tmp; } return n;}TYPE gb(TYPE m, TYPE n){ return m*n/gx(m,n);}TYPE f(int n){ TYPE CNT[N+1]; TYPE IDX[N+1]; TYPE i,j; TYPE tmp,max,idx; CNT[1] = 1; IDX[1] = 1; for (i=2;i<=n;i++) { max = i; idx = i; for (j=1;j=max) //if (tmp>max) { max = tmp; idx = j; } } CNT[i] = max; IDX[i] = idx; } i = n; do { idx = IDX[i]; printf("%d ", idx); i -= idx; }while(i); return CNT[n];}void main(){ int n; while(scanf("%d",&n)&&n) { printf("- %d\n",f(n)); }}