动态规划算法
用动态规划法求组和数的算法
#include <stdio.h>
int combinat(int m, int n) {
int i, j;
int mat[100][100];
if (n == 0 || m == n)
return 1;
else {
for (j = 0; j < n; j++) {
mat[0][j] = 1;
for (i = 1; i <= m-n; i++)
if (j == 0)
mat[i][j] = i+1;
else
mat[i][j] = mat[i-1][j] + mat[i][j-1];
}
return (mat[m-n][n-1]); /* 返回计算得到的结果 */
}
}
int main() {
printf("m=%d ,n=%d ,combinat=%d\n", 10, 2, combinat(10, 2));
printf("m=%d ,n=%d ,combinat=%d\n", 5, 3, combinat(5, 3));
printf("m=%d ,n=%d ,combinat=%d\n", 6, 1, combinat(6, 1));
printf("m=%d ,n=%d ,combinat=%d\n", 4, 2, combinat(4, 2));
return 0;
}
动态规划与其它算法相比,大大减少了计算量,丰富了计算结果,不进求出了当前状态到目标状态的最优值,而且同时求出了到中间状态的最优值,这对于很多实际问题来说是很有用的。动态规划相比一般算法也存在一定缺点:空间占据过多,但对于空间需求量不大的题目来说,动态规划无疑是最佳方法!动态规划算法和贪婪算法都是构造最优解的常有方法。动态规划算法没有一个固定的解题模式,技巧性很强。
中国科技信息2005年第21期
)








