动态规划之装配线问题(递归实现)
装配线问题,问题详见算法导论(第二版)中文版地193页(英文版323页)。
C#实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 动态规划之装配线问题
{/// <summary>
/// 动态规划之转配线问题,用递归实现,但记录中间结果
/// </summary>
class Program
{static int[,] a = new int[2, 6] { { 7, 9, 3, 4, 8, 4 }, { 8, 5, 6, 4, 5, 7 } };static int[,] t = new int[2, 5] { { 2, 3, 1, 3, 4 }, { 2, 1, 2, 2, 1 } };static int[] e = new int[2] { 2, 4 };static int[] x = new int[2] { 3, 2 };// 两个缓冲区
static int[] fa = new int[6] {-1, -1, -1, -1, -1, -1};static int[] fb = new int[6] {-1, -1, -1, -1, -1, -1};/// <summary>
/// 主函数
/// </summary>
/// <param name="args"></param>
static void Main(string[] args){Console.WriteLine(f(5));}/// <summary>
/// 生产线
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
static int f(int n){int ta = f1(n) + x[0];
int tb = f2(n) + x[1];
return ta < tb ? ta : tb;
}/// <summary>
/// 第一条生产线
/// </summary>
/// <param name="j"></param>
/// <returns></returns>
static int f1(int j){if (fa[j] == -1)
{if (j == 0)
fa[j] = e[0] + a[0, 0];else
{int ta = f1(j - 1) + a[0, j];
int tb = f2(j - 1) + t[1, j - 1] + a[0, j];
fa[j] = ta < tb ? ta : tb;}}return fa[j];
}/// <summary>
/// 第二条生产线
/// </summary>
/// <param name="j"></param>
/// <returns></returns>
static int f2(int j){if (fb[j] == -1)
{if (j == 0)
fb[j] = e[1] + a[1, 0];else
{int ta = f2(j - 1) + a[1, j];
int tb = f1(j - 1) + t[0, j - 1] + a[1, j];
fb[j] = ta < tb ? ta : tb;}}return fb[j];
}}}

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述