C#使用动态规划解决0-1背包问题实例分析

 更新时间:2015年04月21日 15:58:14   作者:疯狂一夏  
这篇文章主要介绍了C#使用动态规划解决0-1背包问题,实例分析了C#动态规划算法的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#使用动态规划解决0-1背包问题的方法。分享给大家供大家参考。具体如下:

// 利用动态规划解决0-1背包问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Knapsack_problem
// 背包问题关键在于计算不超过背包的总容量的最大价值
{
 class Program
 {
  static void Main()
  {
   int i;
   int capacity = 16;
   int[] size = new int[] { 3, 4, 7, 8, 9 };
   // 5件物品每件大小分别为3, 4, 7, 8, 9 
   //且是不可分割的 0-1 背包问题
   int[] values = new int[] { 4, 5, 10, 11, 13 };
   // 5件物品每件的价值分别为4, 5, 10, 11, 13
   int[] totval = new int[capacity + 1];
   // 数组totval用来存贮最大的总价值
   int[] best = new int[capacity + 1];
   // best 存贮的是当前价值最高的物品
   int n = values.Length;
   for (int j = 0; j <= n - 1; j++)
    for (i = 0; i <= capacity; i++)
     if (i >= size[j])
      if (totval[i] < (totval[i - size[j]] + values[j]))
   // 如果当前的容量减去J的容量再加上J的价值比原来的价值大,
   //就将这个值传给当前的值
      {
       totval[i] = totval[i - size[j]] + values[j];
       best[i] = j; // 并把j传给best
      }
   Console.WriteLine("背包的最大价值: " + totval[capacity]);
   // Console.WriteLine("构成背包的最大价值的物品是: " );
   // int totcap = 0;
   // while (totcap <= capacity)
   // {
   //  Console.WriteLine("物品的大小是:" + size[best[capacity - totcap]]);
   //  for (i = 0; i <= n-1; i++)
   //  totcap += size[best[i]];
   // }
  }
 }
}

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • C#使用Win32 Api实现进程注入到wechat的过程

    C#使用Win32 Api实现进程注入到wechat的过程

    这篇文章主要介绍了C#使用Win32 Api实现进程注入到wechat,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 浅谈C#中的Async和Await的用法详解

    浅谈C#中的Async和Await的用法详解

    这篇文章主要介绍了浅谈C#中的Async和Await的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • C#调用Oracle存储过程方法介绍(附源码)

    C#调用Oracle存储过程方法介绍(附源码)

    这篇文章介绍了C#调用Oracle存储过程的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#实现QQ聊天窗口

    C#实现QQ聊天窗口

    这篇文章主要为大家详细介绍了C#实现QQ聊天窗口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C# wpf实现控件刷新的示例代码

    C# wpf实现控件刷新的示例代码

    这篇文章主要为大家详细介绍了C# wpf实现控件刷新的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C# windows语音识别与朗读实例

    C# windows语音识别与朗读实例

    这篇文章主要为大家详细介绍了C# windows语音识别与朗读实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#难点逐个击破(5):类的访问类型

    C#难点逐个击破(5):类的访问类型

    类的访问类型有时也叫访问级别,使用以下访问修改符:Public、Protected、Private、internal、protected internal。
    2010-02-02
  • c# 反射+自定义特性保存数据至本地

    c# 反射+自定义特性保存数据至本地

    这篇文章主要介绍了c# 反射+自定义特性保存数据至本地的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • WPF利用TabControl控件实现拖拽排序功能

    WPF利用TabControl控件实现拖拽排序功能

    在UI交互中,拖拽操作是一种非常简单友好的交互,这篇文章主要为大家介绍了WPF如何利用TabControl控件实现拖拽排序功能,需要的小伙伴可以参考一下
    2023-10-10
  • C#从数据库读取数据到DataSet并保存到xml文件的方法

    C#从数据库读取数据到DataSet并保存到xml文件的方法

    这篇文章主要介绍了C#从数据库读取数据到DataSet并保存到xml文件的方法,涉及C#操作DataSet保存到XML文件的技巧,需要的朋友可以参考下
    2015-04-04

最新评论