C# 算法系列 - 贪婪算法(背包问题)

2023-11-03

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*===========贪婪算法-背包问题==============
                背包问题(Knapsack problem)是一种组合优化的NP完全问题。
                问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得背包里物品的总价格最高。
                问题的名称来源于如何选择最合适的物品放置于给定背包中。
                相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。
                也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V             
             */
            //货物重量和价值
            int[,] a;
            //背包承重
            int w;
            //测试数据,答案是334
            a = new int[,] { { 79, 58, 86, 11, 28, 62, 15, 68 }, { 83, 14, 54, 79, 72, 52, 48, 62 } };
            w = 200;
            int v; //最大价值
            v = GetMaxValue(w, a, 0);
            Console.WriteLine($"背包能实现的最大价值为:{v}");
            Console.ReadKey();
        }

        /// <summary>
        /// 获得背包承重w,装货物o,从第k件向后考虑,得到的最大价值
        /// </summary>
        /// <param name="w">背包承重</param>
        /// <param name="o">货物o</param>
        /// <param name="k">第几件开始默认索引0</param>
        /// <returns></returns>
        public static int GetMaxValue(int w, int[,] o, int k)
        {
            int v, t1, t2;
            //如果是最后一件货物
            if (k == o.GetLength(1) - 1)
            {
                if (w >= o[0, k])
                {
                    v = o[1, k];
                }
                else
                {
                    v = 0;
                }
            }
            //如果装得下当前货物
            else if (w >= o[0, k])
            {
                t1 = GetMaxValue(w - o[0, k], o, k + 1) + o[1, k];
                t2 = GetMaxValue(w, o, k + 1);
                v = GetMax(t1, t2);
            }
            //装不下当前货物的情况
            else
            {
                v = GetMaxValue(w, o, k + 1);
            }
            return v;
        }
        public static int GetMax(int a, int b)
        {
            return a > b ? a : b;
        }

    }
}

MSCL超级工具类库
基于C#开发的超强工具类,包含数据库操作,字符串处理,文件或者文件夹处理
网络请求,缓存处理,数据容器等上百个常用工具类封装,附带调用示例和参数说明,
提供CHM详细文档,上百个生产环境使用,稳定高效,简单易用。
真正做到“工具在手,一切尽有”,让你大幅度的提高编程效率,提高编程水平。
联系QQ:7400799(请备注 "MSCL")

===============================================

重要压缩文件忘记解压密码?网上下载rar/zip/7z等压缩文件,需要密码?
====极速解密助手,支持支持RAR/ZIP/7Z等多种压缩文档解密======
★ 解密不超过24小时,跟密码复杂程度相关
★ 解密成功后再收费,无套路
★ 解密成功后自动删除原件,无后顾之忧
联系QQ:7400799(请备注 "文件解密")

==============================================

Magic.Orm已在数百个成熟项目中应用,是比较完善的ORM框架(基于C#开发)。开发过程中参考了NBear与MySoft,吸取了其中的一些精华,加入新思想,
后期参考EF的Lambda语法进行大量扩展。

为什么选择Magic.Orm?

  • 上手简单,0学习成本。使用方便,按照sql书写习惯编写C#.NET代码。功能强大。
  • 高性能,接近手写Sql。
  • 体积小(不到200kb,仅一个dll)。
  • 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等数据库。
  • 支持大量Lambda表达式写法。
  • 不需要像NHibernate的XML配置,不需要像EF的各种数据库连接驱动,集成简单。

购买源码 请联系QQ:7400799(请备注 "ORM")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 算法系列 - 贪婪算法(背包问题) 的相关文章

  • loadrunner报错问题处理

    CPU使用率过高 Code 29723Error Failed to deliver a p2p message from parent to child process reason communication error Code 60

随机推荐

  • 医院信息化系统术语汇总

    以下文章来源于罗福如 作者Rolia 关于专业术语 每个领域都有领域中的专业术语 了解掌握也是为了工作上的沟通 让我们听懂同行说的话 也能展示自身具备专业知识 下面基本专业术语概念 从事智慧医疗 互联网医疗的你应该掌握 1 医院信息系统 H
  • idea热部署静态资源无法及时生效

    飘 Idea 每次修改JS文件都需要重启Idea才能生效解决方法 最近开始使用Idea 有些地方的确比eclipse方便 但是我发现工程每次修改JS或者是JSP页面后 并没有生效 每次修改都需要重启一次Tomcat这样的确不方便 我想Ide
  • 解决Access32位驱动器问题

    Access数据源驱动器是32位的 64位不支持 只要打开32位版本的ODBC管理工具就可以了 下面是我解决方法 打开这个就行了C Windows SysWOW64 odbcad32 exe
  • linux c++编程

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 一 前提 以下环境均采用VMWare虚拟机安装CentOS6 6环境下编程 想要
  • 常用的linux命令还只能说出cd、ls?下次面试说出这几个命令提升你的层次吧!

    mpstat 显示各个可用CPU的状态 P 指定CPU编号 mpstat p 5 指定查看编号5CPU的状态 间隔时间 次数 mpstat 2 3 两秒一次合计输出三次 pidstat 显示指定进程CPU 内存 线程 设备IO等资源的占用情
  • 个人记账管理系统(大二第一学期JAVA期末项目)

    项目简介 设置账单条目Account类 定义属性 支出金额expend 收入金额income 时间datestr 账单条目备注remark 账单条目类型type 账单条目流水编号id 设置用户User类 定义用户信息 帐号昵称UserNam
  • C++模版深度解析

    在C 发明阶段 C 之父Stroustrup和贝尔实验室的C 小组对原先的宏方法进行了修订 对其进行了简化并将它从预处理范围移入了编译器 这种新的代码替换装置被称为模板 而且它变现了完全不同的代码重用方法 模板对源代码重用 而不是通过继承和
  • 支持向量机SVM

    文章目录 SVM简单理解 SVM代码实现 导入数据集 SVM实现 画出支持向量 总结 SVM简单理解 在下二维平面存在以下数据点 不同颜色代表不同类别 现在需要画一条直线 想将两个类别分别开来 当有新数据加入时 根据这条直线 也能将新数据正
  • Vue:ElementUI怎么引入外部svg图标

    推荐阿里巴巴图标库 命令行运行npm install svg sprite loader 创建icons svg文件夹 将svg文件放在该文件夹下面 在components文件夹中创建svgiconfont vue文件 文件内容
  • 【啃书】《智能优化算法及其MATLAB实例》例7.2模拟退火算法进行函数寻优

    文章目录 问题描述 仿真过程 matlab源码 问题描述 仿真过程 matlab源码 该脚本要命名为func2 m 适应度函数 function value func2 x y value 5 cos x y x y y y y value
  • postgresql优化案例三:recheck cond

    文章目录 1 SQL语句 2 查看改善前执行计划 3 解决方案 3 1增加work mem的size 3 2 创建合适的索引 4 改善后执行计划 1 SQL语句 delete from sap dispatchingd hist a whe
  • 使用 VBA 自动化 Chrome / Edge

    介绍 Internet Explorer classic 下称IE 是基于ActiveX技术的 对于 Webscraping 或从 VBA 等 OLE 感知编程语言进行测试等任务 自动化 IE 非常容易 但微软将在不久的将来终止对 IE 的
  • C# 定义宏

    define ENABLE TEST 必须在 using 的上方定义 using System Collections using UnityEngine public class TestDefine MonoBehaviour void
  • 通配符*和?的区别

    通配符 和 的区别是 可以用来代替零个 单个或多个字符 而 仅可以使用代替一个字符 表示匹配的数量不受限制 而 的匹配字符数则受到限制
  • 17:UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

    菜鸟学python习题17运行错误 我的 直接在open里加了一个 errors ignore 即可 第一个人 使用python的时候经常会遇到文本的编码与解码问题 其中很常见的一种解码错误如题目所示 下面介绍该错误的解决方法 将 gbk
  • Rocketmq机制回顾总结

    1 应用场景如解耦 削峰填谷 异步处理 分布式事务中间协调 2 nameserver producer broker consumer 3 brokerName brokerId brokerRole Namesrvaddr常用配置参数 4
  • mysql查询语句group by 语句报错

    高版本的mysql 在查询语句时 有group by 会报错 报错信息如下 gt 1055 Expression 40 of SELECT list is not in GROUP BY clause and contains nonagg
  • [nifi] 数据管理分发工具

    官方文档 Apache NiFi 运行 HOME bin run nifi bat 打开网页 127 0 0 1 nifi 账号密码 HOME logs nifi app log 找到如下字段 开始界面 简单实例 1 本地 gt 本地 2
  • sqlplus,imp 等命令无效解决

    今天我在数据库上准备导入数据 但在输入sqlplus nolog 时报出 sqlplus 不是有效的内部命令 解决方案 在oracle ora92 bin 下找到了 sqlplus imp exp 等命令 点开可以执行 也可以在dos下进入
  • C# 算法系列 - 贪婪算法(背包问题)

    using System namespace ConsoleApp1 class Program static void Main string args 贪婪算法 背包问题 背包问题 Knapsack problem 是一种组合优化的NP