资源分配问题动态规划算法C语言
时间: 2023-12-23 16:26:25 浏览: 31
根据提供的引用内容,以下是资源分配问题的动态规划算法C语言实现:
```c
#include <stdio.h>
#define N 3 // 项目数
#define M 8 // 资金数
int main()
{
int i, j, k;
int gain[N] = {6, 5, 3}; // 利润表
int cost[N][M+1] = {0}; // 资源分配表
int max_gain = 0; // 最大利润
int max_index = 0; // 最大利润所在的资源分配表的下标
// 初始化第一行
for (j = 0; j <= M; j++) {
cost[0][j] = j / gain[0];
}
// 动态规划
for (i = 1; i < N; i++) {
for (j = 0; j <= M; j++) {
max_gain = 0;
max_index = 0;
for (k = 0; k <= j/gain[i]; k++) {
if (max_gain < cost[i-1][j-k*gain[i]] + k*gain[i]) {
max_gain = cost[i-1][j-k*gain[i]] + k*gain[i];
max_index = j-k*gain[i];
}
}
cost[i][j] = max_gain;
}
}
// 输出结果
printf("最大利润为:%d万元\n", cost[N-1][M]);
printf("资源分配方案为:\n");
for (i = N-1, j = M; i >= 0; i--) {
printf("项目%d分配%d万元\n", i+1, j-max_index);
j = max_index;
max_index = cost[i-1][j] == max_gain ? j : max_index;
max_gain = cost[i-1][j] == max_gain ? max_gain : cost[i-1][j];
}
return 0;
}
```