c语言动态规划法秋矩阵最优解代码
时间: 2024-11-15 17:28:27 浏览: 34
在C语言中,动态规划是一种常见的算法思想,用于求解最优化问题,如找到数组或矩阵中的最优路径、最大值等。对于矩阵问题,我们可以用动态规划来解决0-1背包问题或其他类似问题,比如计算最长递增子序列。
下面是一个简单的例子,展示如何使用动态规划求解二维数组(矩阵)中的最小路径和问题(每次只能向右或向下移动,目标是最小化从左上角到右下角的路径和)。这个例子中,我们假设矩阵元素都是正整数。
```c
#include <stdio.h>
int minPathSum(int m, int n, int grid[ROW][COL]) {
// 初始化第一行和第一列
for (int i = 0; i < n; ++i) {
grid[0][i] = grid[0][i];
}
for (int j = 0; j < m; ++j) {
grid[j][0] = grid[j][0];
}
// 动态规划填充剩余元素
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
grid[i][j] = grid[i - 1][j] + grid[i][j - 1]; // 取两者中的较小值
}
}
return grid[m - 1][n - 1]; // 最终结果就是右下角的元素
}
int main() {
int ROW = 4;
int COL = 5;
int grid[ROW][COL] = { {1, 3, 1, 1, 4},
{2, 2, 0, 1, 5},
{3, 3, 2, 2, 1},
{4, 2, 3, 4, 2} };
printf("The minimum path sum is %d\n", minPathSum(ROW, COL, grid));
return 0;
}
```
阅读全文