各位给出的答案的都是高人 佩服啊

Only the Code Tells the Truth K.I.S.S
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