当前位置: 首页 > news >正文

贪心算法基础

  1 /*有一个背包,背包容量是M=150kg。有7个物品,物品不可以分割成任意大小。要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
  2 
  3 物品 A B C D E F G
  4 
  5 重量 35kg 30kg 6kg 50kg 40kg 10kg 25kg
  6 
  7 价值 10$ 40$ 30$ 50$ 35$ 40$ 30$
  8 
  9 分析:
 10 
 11 目标函数:∑pi最大
 12 
 13 约束条件是装入的物品总重量不超过背包容量:∑wi<=M(M=150)
 14 
 15 ⑴根据贪心的策略,每次挑选价值最大的物品装入背包,得到的结果是否最优?
 16 
 17 ⑵每次挑选所占重量最小的物品装入是否能得到最优解?
 18 
 19 ⑶每次选取单位重量价值最大的物品,成为解本题的策略。
 20 */
 21 
 22 using System;
 23 using System.Collections.Generic;
 24 using System.Linq; 
 25 
 26 namespace GreedyAlgorithm
 27 {
 28     class Program
 29     {
 30         static void Main(string[] args)
 31         {
 32             Thing t1 = new Thing(10,35) { kg = 35, pirce = 10 }; 
 33             Thing t2 = new Thing(40,30) { kg = 30, pirce = 40 }; 
 34             Thing t3 = new Thing(30,6)  { kg =  6, pirce = 30 }; 
 35             Thing t4 = new Thing(50,50) { kg = 50, pirce = 50 }; 
 36             Thing t5 = new Thing(35,40) { kg = 40, pirce = 35 }; 
 37             Thing t6 = new Thing(40,10) { kg = 10, pirce = 40 }; 
 38             Thing t7 = new Thing(30,25) { kg = 25, pirce = 30 }; 
 39             List<Thing> list = new List<Thing>();
 40             list.Add(t1);
 41             list.Add(t2);
 42             list.Add(t3);
 43             list.Add(t4);
 44             list.Add(t5);
 45             list.Add(t6);
 46             list.Add(t7);
 47             //取重量最小的
 48             int b = 0;
 49             int forprice= getMAXKG(list ,out b);
 50             Console.WriteLine("取重量最小的--------------------重量:" + b + "    * *价格"+ forprice);
 51             Console.WriteLine("**********************************************************************");
 52             //取价值最高的
 53             int c = 0;
 54             int forp = getMAXPrice(list,out c);
 55             Console.WriteLine("取价格最大的--------------------重量:" + c + "    * *价格" + forp);
 56             Console.WriteLine("**********************************************************************");
 57             //取单价最高的 
 58             int d = 0;
 59             int univalence = getMAXunivalence(list, out d);
 60             Console.WriteLine("取价格最大的--------------------重量:" + d + "    * *价格" + univalence);
 61             Console.ReadKey();
 62         }
 63 
 64         private static int getMAXunivalence(List<Thing> li,out int b)
 65         {
 66             int a = 0;
 67             b = 0;
 68             List<Thing> c = li.OrderBy(i => i.univalence).ToList();
 69             foreach (var item in c)
 70             {
 71                 if (b + item.kg > 150)
 72                 {
 73                     return a;
 74                 }
 75                 a += item.pirce;
 76                 b += item.kg;
 77                 Console.WriteLine("按单价最小取--------------------:KG:" + item.kg.ToString() + "*       *Price:" + item.pirce.ToString() + "*  *单价" + item.univalence.ToString());
 78             }
 79             return a;
 80         }
 81 
 82         private static int getMAXPrice(List<Thing> li,out int  b)
 83         {
 84             int a = 0;
 85             b = 0;
 86             List<Thing> c = li.OrderByDescending(i => i.pirce).ToList();
 87             foreach (var item in c)
 88             {
 89                 if (b + item.kg > 150)
 90                 {
 91                     return a;
 92                 }
 93                 a += item.pirce;
 94                 b += item.kg;
 95                 Console.WriteLine("按价格最大取--------------------:kg:" + item.kg.ToString() + "*       *Price:" + item.pirce.ToString() + "*  *单价" + item.univalence.ToString());
 96             }
 97             return a;
 98         }
 99 
100         private static int getMAXKG(List<Thing> li,out int b) 
101         {
102             int a = 0;
103             b = 0; 
104             List<Thing> c=  li.OrderBy(i => i.kg).ToList();
105             foreach (var item in c)
106             {
107                 if (b + item.kg > 150)
108                 {
109                     return a;
110                 }
111                 a += item.pirce;
112                 b += item.kg;
113                 Console.WriteLine("按重量最小取--------------------:KG:" + item.kg.ToString() + "*       *Price:" +item.pirce.ToString()+"*  *单价"+ item.univalence.ToString());
114             }
115             return a;
116         }
117     }
118     public class Thing
119     {
120         public int kg  { get; set; } 
121         public int pirce { get; set; }
122         public float univalence;
123         public Thing(int a,int b)
124         {
125             univalence= (float)a / b;
126         }
127     }
128 }

 

转载于:https://www.cnblogs.com/Zingu/p/11534683.html

相关文章:

  • ElementUI——报错汇总
  • ElementUI——动态表单验证
  • CSP-S 46 题解
  • maven引入本地jar包的方法
  • jmap错误:unknown CollectedHeap type : class sun.jvm.hotspot.gc_interface.CollectedHeap
  • nginx retryfiles
  • gitlab 构建常见错误
  • PS——使用切片工具切出透明图片
  • 从零开始部署CloudSim4.0云计算仿真平台
  • Ubuntu 16.04 64位 安装NVIDIA驱动 CUDA9.1和PyTorch
  • 从零开始部署Guns V4.0 (SpringBoot开源框架)教程
  • 云计算:数据中心之虚拟机
  • codeblocks不支持16位,“64位Windows不兼容”的问题
  • PTA 6-1 在一个数组中实现两个堆栈 (20分)
  • PTA 7-1 哈夫曼编码 (30分)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • android图片蒙层
  • eclipse的离线汉化
  • FineReport中如何实现自动滚屏效果
  • iOS 颜色设置看我就够了
  • Object.assign方法不能实现深复制
  • Python 基础起步 (十) 什么叫函数?
  • Python实现BT种子转化为磁力链接【实战】
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Zsh 开发指南(第十四篇 文件读写)
  • 对象管理器(defineProperty)学习笔记
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 目录与文件属性:编写ls
  • 我从编程教室毕业
  • 携程小程序初体验
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • mysql面试题分组并合并列
  • 说说我为什么看好Spring Cloud Alibaba
  • 选择阿里云数据库HBase版十大理由
  • ​secrets --- 生成管理密码的安全随机数​
  • ​什么是bug?bug的源头在哪里?
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (4)事件处理——(7)简单事件(Simple events)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (三分钟)速览传统边缘检测算子
  • (推荐)叮当——中文语音对话机器人
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .net framework profiles /.net framework 配置
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET连接MongoDB数据库实例教程