各位给出的答案的都是高人 佩服啊										
					
	
	
	
			
Only the Code Tells the Truth K.I.S.S
 2014-12-31 20:46
	    2014-12-31 20:46
   程序代码:
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#define MAX 3
int Tile[MAX] = {1, 2, 3};
int NumTile(int n); //动态规划法
int main()
{
    int n;
    int *S;
   // scanf("%d", &n);
   n = 1;
    while (n != 10)
    {
        printf("s%d = %d\n", n, NumTile(n));
           n++;
    }
    
    return 0;
}
int NumTile(int n) //动态规划法
{
    int (*f)[MAX];//f[n][m]的含义为总长度为n,且最后一块地砖长度为Tile[m]的组合数量 
    int i, j, k, sum;
    
    f = (int (*)[MAX])calloc(n+1, sizeof(f[0]));
    for (i=0; i<MAX; i++)//总长度为Tile[i],且最后一块地砖长度为Tile[i]的组合只有1个 
        f[Tile[i]][i] = 1;
        
    for (i=1; i<=n; i++)//总长度 
    {
        for (j=0; j<MAX; j++)//最后一块地砖长度为Tile[j] 
        {
            k = 0;
            if (j == 0)
                k = 1;
            for (; k<MAX; k++)//最后一块地砖长度为Tile[k] 
            {
                if (i > Tile[j])
                {
                    f[i][j] += f[i-Tile[j]][k];//累积总长度为i,且最后一块地砖长度为Tile[k]的组合数量 
                }
            }
        }
    }
    for (sum=j=0; j<MAX; j++)
    {
        sum += f[n][j]; 
    }
    
    free(f);
    
    return sum;
}
 2015-01-01 20:10
	    2015-01-01 20:10