/// <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. 系统环境变量中 HTTPS_PROXY 的误区

    前段时间在测试一个连麦 demo,demo 简要说可以在内网环境中运行时,输入频道号就可以模拟连麦 但是在加入连麦时,一直返回错误 -2 EOF,询问得知,该错误的解释信息是"Service ...

  2. .gitignore 无法工作

    在开发一个新项目时,发现每次编译时都会产生一些 .obj 无用的文件,这些文件并不需要 push 到 github 上 故使用 .gitignore 忽略这些文件 首先,我们可以设置这些文件的输出目录 ...

  3. 深入理解Go语言(03):scheduler调度器 - 基本介绍

    一:什么是调度 平常我们在生活中会有哪些调度的例子呢?比如十字路口的红绿灯,它就是一种调度系统.在交通十字路口,每个路口上多多少少有一些车辆,为了限制这些车辆不随意行驶,就建起了红绿灯调度系统.红绿灯 ...

  4. 学习go语言编程之常量

    什么在常量 在Golang中,常量是指在编译期就已知且不可改变的值. 字面常量 在程序中硬编码的常量值被称为字面常量,如: -12 // 整数类型常量 3.1415926 // 浮点类型常量 3.2+ ...

  5. ECMA Script Module(ES module)知识点

    1.每个 ES Module 都是运行在单独的私有作用,ESM 自动采用严格模式,忽略use strict <script type="module">console. ...

  6. 【Azure 应用服务】应用代码中需要使用客户端证书访问服务接口,部署在应用服务后报错不能找到证书(Cannot find the X.509 certificate)

    问题描述 在应用中,需要访问另一个服务接口,这个接口需要使用客户端证书进行认证.在代码中使用 System.Security.Cryptography.X509Certificates 加载Windo ...

  7. C#与C互操作

    C#给C++传递char**(转载) extern "C" _declspec(dllexport)void GetResult(char* a,char** pBuf) { sp ...

  8. Java 多线程------例子(1) --创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式

    1 package com.bytezero.threadexer; 2 3 4 5 /** 6 * 7 * 创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式 8 * @auth ...

  9. Java 小案列 this关键字使用+构造器 +方法+调用

    1 package com.bytezero.thistest; 2 3 public class Boy 4 { 5 private String name; 6 private int age; ...

  10. idea导入spring源码运行缺失cglib和objenesis的jar包的办法【亲测有效】

    idea导入spring源码运行缺失cglib和objenesis的jar包的办法[亲测有效] 亲测有效,网上说的大多废话 上图,操作如下,运行gradle