A[0]=1; a[1]=2;
Each number can then be summed up by any of the preceding two numbers (which can be the same number), asking for the shortest sequence of number n
n Max is 100, iterative deepening search hits the table
#include "stdio.h" #include "string.h" int w;int pri[110][15];//record answer int len[110];// Number n required length int seq[110]; The number of Dfs for each number of arrays is void Dfs (int k) {int i,j,l; if (k>w) return; for (i=1;i<k;i++) for (j=i;j<k;j++) {seq[k]=seq[i]+seq[j]; if (seq[k]>100 | | seq[k]<=seq[k-1]) continue; if (Len[seq[k]]==-1 | | len[seq[k]]>k) {len[seq[k]]=k; for (l=1;l<=k;l++) pri[seq[k]][l]=seq[l]; } dfs (K+1); }}int Main () {int i,n; memset (pri,0,sizeof (PRI)); memset (len,-1,sizeof (len)); Seq[1]=1; seq[2]=2; Len[1]=1; len[2]=2; Pri[1][1]=1; Pri[2][1]=1; pri[2][2]=2; for (w=3;w<=10;w++) DFS (3); while (scanf ("%d", &n)!=eof) {if (n==0) break; for (i=1;i<len[n];i++) printf ("%d", pri[n][i]); printf ("%d\n", Pri[n][len[n]]); } return 0;}
POJ 2248 Iterative deepened search