01背包问题 动态规划

01背包问题 动态规划

  • 01背包问题 动态规划
    • 写了点代码 C#实现
    • 程序运行结果
    • 代码和程序已经上传

01背包问题 动态规划

很有意思的问题。

写了点代码 C#实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;namespace Package
{public class Item{public int weight;public int value;public Item(int w, int val) {weight = w;value = val;}}public class Problem{//背包容量int content;int item_cnt;Item[] items;int[,] dps;public Problem(){}public void Init(){Console.Write("请输入背包容量(正整数):");string con = Console.ReadLine();while (!int.TryParse(con, out content) || content < 0) {Console.Write("输入错误,请输入背包容量(正整数):");con = Console.ReadLine();}Console.Write("请输入物品数量(正整数):");con = Console.ReadLine();while (!int.TryParse(con, out item_cnt) || item_cnt < 0){Console.Write("输入错误,请输入物品数量(正整数):");con = Console.ReadLine();}items = new Item[item_cnt];int temp_weight = 0, temp_val = 0;for (int idx  = 0; idx < items.Length; idx++) {Console.Write("请输入物品{0}重量(正整数):", idx+1);con = Console.ReadLine();while (!int.TryParse(con, out temp_weight) || temp_weight < 0){Console.Write("输入错误,请输入物品{0}重量(正整数):", idx + 1);con = Console.ReadLine();}Console.Write("请输入物品{0}价值(正整数):", idx + 1);con = Console.ReadLine();while (!int.TryParse(con, out temp_val) || temp_val < 0){Console.Write("输入错误,请输入物品{0}价值(正整数):", idx + 1);con = Console.ReadLine();}items[idx] = new Item(temp_weight, temp_val);}}public void Display(){Console.WriteLine("========问题信息========");Console.WriteLine("背包容量:{0} 物品数量:{1}", content, item_cnt);for (int idx = 0; idx < items.Length; idx++) {Console.WriteLine("物品{0} (重量:{1} 价值:{2})", idx+1, items[idx].weight, items[idx].value);}}public void Cal(){int h_cnt = item_cnt + 1;int l_cnt = content + 1;dps = new int[h_cnt, l_cnt];for (int item = 0;item < h_cnt; item++) {for (int cidx = 0; cidx < l_cnt; cidx++) {if (item == 0) {dps[item, cidx] = 0;}else{if (cidx < items[item - 1].weight)//背包在此容量下压根就装不上{dps[item, cidx] = dps[item - 1, cidx];}else//能装 装和不装取最大{dps[item, cidx] = Math.Max(dps[item-1, cidx], dps[item-1, cidx-items[item-1].weight] + items[item-1].value);}}}}}public void Answer(){Console.WriteLine("========dp table========");for (int h = 1; h < item_cnt + 1; h++){for (int l = 0; l < content + 1; l++){Console.Write("{0}   ", dps[h, l]);}Console.WriteLine();}Console.WriteLine("最大价值:{0}", dps[item_cnt, content]);Console.Write("背包信息:");Plan(item_cnt, content);Console.WriteLine();}void Plan(int h, int l){if (l <= 0 || h <= 0)return;if (dps[h - 1,l] != dps[h,l]){Plan(h-1, l - items[h-1].weight);Console.Write("物品{0} ", h);}else{Plan(h-1, l);}}}internal class Program{static bool IsContinue(){Console.WriteLine("是否继续(Y/N)?");string val = Console.ReadLine();while (val != "Y" && val != "y" && val != "N" && val != "n"){Console.WriteLine("是否继续(Y/N)?");val = Console.ReadLine();}if (val == "Y" || val == "y"){return true;}else{return false;}}static void Main(string[] args){Problem problem = new Problem();do{problem.Init();problem.Display();problem.Cal();problem.Answer();} while (IsContinue());}}
}

程序运行结果

在这里插入图片描述

代码和程序已经上传

代码和程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/443096.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle函数使用

ROW_NUMBER函数 ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY column2 DESC) -- 根据column1分组按column2降序排序生成序号&#xff0c;序号由小到大,会生成一个唯一的序号 -- 例如column2中有两列值都为1,那他们的序号会有一个在上一个在下ROW_NUMBER() OVER(ORDER BY …

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 &#xff08;1&#xff09;树&#xff08;Tree&#xff09;是 n&#xff08;n ≥\geq 1&#xff09;个节点的有限集&#xff0c;n 0时称…

Android悬浮窗实现步骤

最近想做一个悬浮窗秒表的功能&#xff0c;所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…

【CSS】css获取子元素的父元素,即通过子元素选择父元素(使用CSS伪类 :has() :not() )

这里写目录标题 一、:has获取第一个div获取包含 a.active 的 li获取第二个div 二、:not除了类名为active 的 a,其他的a的字体都为18px <div><h1>标题</h1></div><div><ul><li><a href"#" class"active">测…

k8s中调整Pod数量限制的方法

一、介绍 Kubernetes节点每个默认允许最多创建110个pod&#xff0c;有时可能由于主机配置扩容的问题&#xff0c;从而需要修改节点pod运行数量的限制。 即&#xff1a;需要调整Node节点的最大可运行Pod数量。 一般来说&#xff0c;只需要在kubelet启动命令中增加–max-pods参数…

大数据 - Hadoop系列《四》- MapReduce(分布式计算引擎)的核心思想

上一篇&#xff1a; 大数据 - Hadoop系列《三》- MapReduce&#xff08;分布式计算引擎&#xff09;概述-CSDN博客 目录 13.1 MapReduce实例进程 13.2 阶段组成 13.4 概述 13.4.1 &#x1f959;Map阶段&#xff08;映射&#xff09; 13.4.2 &#x1f959;Reduce阶段执行过…

安卓视图基础

目录 设置视图的宽高 设置视图的间隔 设置视图的对齐方式 设置视图的宽高 设置视图的间隔 设置视图的对齐方式 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"a…

【Linux】线程池的简易实现(懒汉模式)

文章目录 前言一、懒汉方式1.普通模式1.线程安全模式 二、源代码1.Task.hpp(要执行的任务)2.ThreadPool.hpp(线程池)3.Main.cpp 前言 线程池: 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监…

公司如何测试员工对网络钓鱼的反应?

&#x1f4e9; "下午好&#xff0c;文件已经商定。请到下面链接的门户网站下载"。 我们每个人都可能在工作电子邮件中收到此类内容的信息&#xff1a;它可能来自真正的员工&#xff0c;也可能来自公司的信息安全服务部门&#xff0c;该部门决定对您进行检查&#xf…

vue3项目下载@element-plus/icons-vue苦笑不得的乌龙

一、背景 node.js版本&#xff1a;v16.20.1 npm版本&#xff1a;8.19.4 pnpm版本&#xff1a;8.0.0 二、心路历程 pnpm install element-plus/icons-vue 用命令下载element-plus/icons-vue的时候&#xff0c;报错并提醒如图 是&#xff0c;我按照提示执行了&#xff0c;结…

seata Adjusted frame length exceeds 8388608: 539959368,nacos+mysql+seata部署

问题&#xff1a;docker 部署 seata 后出现异常 seata Adjusted frame length exceeds 8388608: 539959368 CSDN上找了一圈都解决不了。github又半天访问不上。后来终于访问上了&#xff0c;发现这是一个很离谱的问题。。。 原因&#xff1a;访问错了端口 seata默认分两个端口…

Google Gemini Pro 国内版

Google Gemini Pro 国内版&#xff1a;【直达链接】 Google Gemini Pro 国内版 能力分类基准测试描述更高分数更好Gemini UltraGPT-4通用MMLU57个主题&#xff08;包括STEM、人文等&#xff09;的问题表示是90.0%86.4%&#xff08;5-shot, 报告&#xff09;推理Big-Bench Hard…