数据结构(C#)-- 贪心算法解决背包问题

2023-11-01

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data ;
using System.Collections ;
namespace Kapbag
{
    public class Knapsack
    {
        private float quantity;
        SortedList items = new SortedList();
        string itemList;
        public Knapsack(float max)
        {
            quantity = max;
        }
        public void FillSack(ArrayList objects)
        {
            int pos = objects.Count - 1;
            int totalUnits = 0;
            float totalVal = 0.0F;
            int tempTot = 0;
            while (totalUnits < quantity)
            {
                tempTot += ((Carpet)objects[pos]).GetUnit();
                if (tempTot <= quantity)
                {
                    totalUnits += ((Carpet)objects[pos]).GetUnit();
                    totalVal += ((Carpet)objects[pos]).GetVal();
                    items.Add(((Carpet)objects[pos]).GetItem(), ((Carpet)objects[pos]).GetUnit());
                }
                else
                {
                    float tempUnit = quantity - totalUnits;
                    float tempVal = ((Carpet)objects[pos]).ItemVal() * tempUnit;
                    totalVal += tempVal;
                    totalUnits += (int)tempUnit;
                    items.Add(((Carpet)objects[pos]).GetItem(), tempUnit);
                }
                pos--;
            }
        }
        public string GetItems()
        {
            foreach (Object k in items.GetKeyList())
                itemList += k.ToString() + ": " + items[k].
                ToString() + " ";
            return itemList;
        }
        static void Main()
        {
            Carpet c1 = new Carpet("Frieze", 1.75F, 12);
            Carpet c2 = new Carpet("Saxony", 1.82F, 9);
            Carpet c3 = new Carpet("Shag", 1.5F, 13);
            Carpet c4 = new Carpet("Loop", 1.77F, 10);
            ArrayList rugs = new ArrayList();
            rugs.Add(c1);
            rugs.Add(c2);
            rugs.Add(c3);
            rugs.Add(c4);
            rugs.Sort();
            Knapsack k = new Knapsack(25);
            k.FillSack(rugs);
            Console.WriteLine(k.GetItems());
        }
    }


    public class Carpet : IComparable
    {
        private string item;
        private float val;
        private int unit;
        public Carpet(string i, float v, int u)
        {
            item = i;
            val = v;
            unit = u;
        }
        public int CompareTo(Object c)
        {
            return (this.val.CompareTo(((Carpet)c).val));
        }
        public int GetUnit()
        {
            return unit;
        }
        public string GetItem()
        {
            return item;
        }
        public float GetVal()
        {
            return val * unit;
        }
        public float ItemVal()
        {
            return val;
        }
    }
 

}

截图:


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

数据结构(C#)-- 贪心算法解决背包问题 的相关文章

随机推荐

  • WebStorm中如何将自己的代码上传到github

    tips 我用的是2020 1版本的webstorm 2020 1以后的跟着操作没问题 其他版本的网上还有很多方法 第一步 进入File gt Setting gt 搜索git 如图 然后将此处的路径添加为Git安装目录中cmd中的git
  • Android ObjectBox 数据库避坑Duplicate files copied in APK lib/armeabi-v7a/libobjectbox.so

    传说比所有的数据库都快点Objectbox 坑还是有的 搞了一天 官网给的文档真的坑 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfig c
  • 携程等企业实施远程办公获好评,TeamViewer协助解决远程办公难题

    近期 携程集团宣布将从3月起实行混合办公制 允许员工每周三和周五选择1 2天远程办公 这一消息引发业内外的广泛关注 许多人对此给予了高度认可 无疑 远程办公的灵活与便捷既可改善员工的通勤状况 也能较好地平衡员工的工作和生活 不过 与远程办公
  • Flask-sqlalchemy增删改查之(删除数据)

    Flask sqlalchemy增删改查之 删除数据 类似更新数据 也存在两种删除数据的方案 1 先查询 再删除 对应SQL中的 先select 再delete 2 基于过滤条件的删除 推荐方案 对应SQL中的 delete xx wher
  • 关系型数据库表与表之间的三种关系

    一 一对一关系 定义 有两个表 在第一个表中的某一行只与第二个表中的一行相关 同时第二个表中的某一行 也只与第一个表中的一行相关 我们称这两个表为一对一关系 例如 第一张表 ID 姓名 国籍 贡献 1001 王大锤 中国 万万没想到 100
  • FPGA面试题目笔记(四)—— 序列检测器、跨时钟域中的格雷码、乒乓操作、降低静动态损耗、定点化无损误差、恢复时间和移除时间

    文章目录 1 序列检测器 1 1 状态机实现序列检测器 1 11不重叠检测和重叠检测 1 1 2 verilog实现 1 1 3 tb文件 1 1 4 如何衡量设备的完备性 1 2 用移位操作实现循环序列发生器 2 最高工作频率与最小工作周
  • electron 应用开发优秀实践

    vivo 互联网前端团队 Yang Kun 一 背景 在团队中 我们因业务发展 需要用到桌面端技术 如离线可用 调用桌面系统能力 什么是桌面端开发 一句话概括就是 以 Windows macOS 和 Linux 为操作系统的软件开发 对此我
  • 循环队列来了解一下!!

    笔者在之前的一篇文章 详细的介绍了 队列之单向链表与双向链表的模拟实现 https blog csdn net weixin 64308540 article details 128742090 spm 1001 2014 3001 550
  • Qtcreator常用快捷键

    qtcreator常用快捷键 1 代码补全 2 切换已打开的文件 3 快速添加方法实体 cpp 声明 4 修改变量名 并应用到所有使用该变量的地方 5 快速打开输出窗口 6 快速切换模式 7 书签功能 8 分栏显示 9 快速重写父类方法 1
  • python学习笔记---正则表达式【廖雪峰】

    正则表达式 正则表达式是一种用来匹配字符串的强有力的武器 它的设计思想是用一种描述性的语言来给字符串定义一个规则 凡是符合规则的字符串 我们就认为它 匹配 了 否则 该字符串就是不合法的 我们判断一个字符串是否是合法的Email的方法是 创
  • Linux-0.12内核打开文件过程--sys_open源码分析

    上图展示了进程打开文件使用的内核数据结构 所以要打开文件 就要构造上图中的关系 int sys open const char filename int flag int mode struct m inode inode struct f
  • js逆向教程1:某某威客登录

    假设不会js语法来进行js破解 本文感谢挖掘机小王子提供的帮助 挖掘机小王子的github https github com EnjoyScraping 网站的登录接口 我们可以准备一组常用的账号密码 并记下对应的MD5 base64等密文
  • 如何计算无线天线长度

    天线长度为波长的1 4 波长 波速 频率 波速 光速 3 100000000 eg 频率为476 3 则天线长度 300 476 3 4 0 1574 m
  • 洛谷 P2249 【深基13.例1】查找

    题目链接 https www luogu com cn problem P2249 include
  • Nginx极简使用

    编译源码安装Nginx 确认系统版本 确认网络 确认yum可用 确认防火墙 确认SELinux 并关闭 安装依赖库和运行环境 下载安装Nginx Nginx源码编译 查看目录结构 生成编译文件makefile 编译 安装 展示nginx的目
  • 【HTSl】A系统开发总结~致敬这热烈的夏季

    2019的六七八月 我陪伴着A系统一起走过这个炎热的夏季 从单一的功能 完成了华丽的蜕变 迎来了我们的成长 经过历时将近两个月的紧张开发 终于迎来了A系统上线 疲惫的身体得到的暂时的缓解 会想这一个月的开发 感觉收获很多 抱怨也很多 在这个
  • SpringBoot2.7.2 版本配置swagger3的方法及教程

    原因 对SpringBoot2 7 2版本 swagger2 x版本不再适用 所以就选择了swagger3版本 但是相较于swagger2版本 swagger3版本更加麻烦 具体教程如下 方法 第一步 引入依赖
  • 【计算机毕业设计】java ssm在线学习系统 在线学习平台

    毕设帮助 源码交流 技术解答 见文末 一 前言 以前 我们的在线学习主要是通过面对面的讲授 这样 有很多优势 教师可以与学生直接交流 但是也有许多不尽人意的地方 课堂在线学习很大程度上受到时间和空间的限制 浪费了在线学习资源同时对于学生的进
  • 【算法题目】Leetcode算法题思路:两数相加

    在LeetCode上刷了一题比较基础的算法题 一开始也能解出来 不过在解题过程中用了比较多的if判断 看起来代码比较差 经过思考和改进把原来的算法优化了 题目 给出两个 非空 的链表用来表示两个非负的整数 其中 它们各自的位数是按照 逆序
  • 数据结构(C#)-- 贪心算法解决背包问题

    using System using System Collections Generic using System Linq using System Text using System Data using System Collect