/// <summary>
/// 金额的 动态分配算法
/// </summary>
public static void FindCosts()
{
// 定义费用明细列表
List<(decimal amount, string name)> costDetails = new List<(decimal, string)> {
(10.50M, "Item 1"),
(20.00M, "Item 2"),
(5.00M, "Item 3"),
(3.00M, "Item 4"),
(12.75M, "Item 5")
}; // 定义总金额
decimal totalAmount = 30.50M; // 定义动态规划表格
bool[,] dp = new bool[costDetails.Count + 1, (int)(totalAmount * 100) + 1]; // 初始化表格
for (int i = 0; i <= costDetails.Count; i++)
{
dp[i, 0] = true;
} // 填充表格
for (int i = 1; i <= costDetails.Count; i++)
{
for (int j = 1; j <= (int)(totalAmount * 100); j++)
{
if (costDetails[i - 1].amount * 100 <= j)
{
dp[i, j] = dp[i - 1, j] || dp[i - 1, j - (int)(costDetails[i - 1].amount * 100)];
}
else
{
dp[i, j] = dp[i - 1, j];
}
}
} // 找到符合条件的费用明细
List<(decimal amount, string name)> result = new List<(decimal, string)>();
int row = costDetails.Count;
int col = (int)(totalAmount * 100);
while (row > 0 && col > 0)
{
if (dp[row, col] && !dp[row - 1, col])
{
result.Add(costDetails[row - 1]);
col -= (int)(costDetails[row - 1].amount * 100);
}
row--;
} // 输出结果
if (result.Count > 0)
{
Console.WriteLine("成本加起来等于{0:C}的细节:", totalAmount);
foreach ((decimal amount, string name) in result)
{
Console.WriteLine("{0:C}\t{1}", amount, name);
}
}
else
{
Console.WriteLine("没有成本细节{0:C}", totalAmount);
}
}

C# 金额的 动态分配算法的更多相关文章

  1. java使用BigDecimal 实现随机金额红包拆分算法

    原创代码,引用注明出处:https://www.cnblogs.com/guangxiang/p/12218714.html @Servicepublic class SplitRedPacketsS ...

  2. JAVA实现拼手气红包算法

    实现拼手气红包算法,有以下几个需要注意的地方: 抢红包的期望收益应与先后顺序无关 保证每个用户至少能抢到一个预设的最小金额,人民币红包设置的最小金额一般是0.01元,如果需要发其他货币类型的红包,比如 ...

  3. 复利计算器(软件工程)及Junit测试———郭志豪

    计算:1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 客户提出: 2.如果按照单利计算 ...

  4. 人人都是 DBA(IV)SQL Server 内存管理

    SQL Server 的内存管理是一个庞大的主题,涉及特别多的概念和技术,例如常见的 Plan Cache.Buffer Pool.Memory Clerks 等.本文仅是管中窥豹,描述常见的内存管理 ...

  5. Java开源生鲜电商平台-账单模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-账单模块的设计与架构(源码可下载) 补充说明:Java开源生鲜电商平台-账单模块的设计与架构,即用户的账单形成过程. 由于系统存在一个押账功能的需求,(何为押账,就是形成公司 ...

  6. 某某水表-M1卡数据算法分析

    # 某某水表-M1卡数据算法分析 ## 卡片数据-----------------------------扇区数据 | 金额:--- |:---13EC 0000 0000 0000 0000 000 ...

  7. Internet接入方式

    (转载) 接入网可以大概分成两类:拨号上网(包括ASDL)与专线上网 在接入网中,目前可供选择的接入方式主要有PSTN.ISDN.DDN.LAN.ADSL.VDSL.Cable-Modem.PON和L ...

  8. 内存分配器 (Memory Allocator)

    对于大多数开发人员而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法. 来UC前,我就是这样觉得的.实际深入进去时,才发现这个领域里也是百家争鸣.非常热闹.有操作 ...

  9. ucoreOS_lab2 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...

  10. 【1】Embarrassingly Parallel(易并行计算问题)

    1.什么是Embarrassingly Parallel(易并行计算问题) 易并行计算问题:A computation that can be divided into a number of  co ...

随机推荐

  1. 我在winform项目里使用“Windows I/O完成端口”的经验分享

    少年!看你骨骼惊奇,是万中无一的练武奇才,我这儿有本武林秘籍,见与你有缘就送你了! 如来神掌 Windows I/O完成端口是一个我至今都说不好的话题,请宽容的接受我这不是科班出身的自学成才的野生程序 ...

  2. SpringBoot整合Swagger2实现接口文档

    展示一下 访问方式一 访问地址:http://localhost:8080/swagger-ui.html#/ 首页 详情页 访问方式二 访问地址:http://localhost:8080/doc. ...

  3. win32 - 使用GDI+播放gif图片

    今天做case的时候遇到一个这样的问题,故记录下来. Codeproject有类似的案例,不过是使用的MFC模板编译的. 因为我们只需要win32程序,所以就....代码如下: CodeProject ...

  4. npm代理 -- 解决在公司内网如何装包的问题

    什么是Npm代理 npm代理指的是npm包管理器在使用时通过代理访问npm服务器获取依赖包的过程.在某些情况下,我们需要npm走代理才能访问到npm服务器,否则会出现timeout的错误.那下面我们就 ...

  5. 硬件开发笔记(二):硬件开发基本流程,制作一个USB转RS232的模块(一):开发基本过程和元器件选型

    前言   做个usb转串口,同时兼容ttl,讲述硬件模块基础的开发流程,本篇描述了全流程过程,然后选型了合适的元器件.   基本流程   以下是笔者个人从事过相关硬件研发,总结出来的流程,仅代表个人意 ...

  6. vscode中python类型注解插件及自动格式化

    # 插件名称 Python Type Hint # 如何ctrl+s保存时格式化,推荐安装yapf包 (flake8貌似不支持有类型注解的) 1.安装yapf包:pip install yapf 2. ...

  7. 【C# .Net】List循环add,出现数据相同现象? 引发对引用类型和值类型的底层逻辑的思考。

    赶项目时发现了一个问题,定义一个引用对象,如果在循环外定义对象,在循环内list.add(object).最后的结果却是所有的对象值都是一样的,即每add一次,都会把之前的数据覆盖. 解决方法:把对象 ...

  8. 【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误

    问题描述 部署Function代码先到预生产槽中,进行测试后通过交换方式,把预生产槽中的代码交换到生产槽上,因为在预生产槽中的设置参数值与生产槽有不同,但是在交换的时候,没有仔细检查.导致在交换的时候 ...

  9. 使用JMeter的JSON提取器:通过递归下降查找,从接口响应中提取特定字段

    在接口测试中,我们经常需要从返回的JSON数据中提取特定字段以便后续使用.JMeter提供了JSON提取器,可以帮助我们实现这一目标.本文将介绍如何使用JMeter的JSON提取器通过递归下降查找的方 ...

  10. JavaScript 最新动态:2024 年新功能

    前言 随着 Web 技术的日新月异,JavaScript 也在不断地吸收新的特性和技术,以满足日益复杂和多样化的开发需求.在 2024 年,JavaScript 迎来了一系列令人瞩目的新功能,这些功能 ...