C语言描述 动态规划 背包问题

C语言描述 动态规划 背包问题动态规划作为不同于其他类型的问题,有着它自己的解题思路以及模型,以下将围绕模型以及解题思路两方面进行讲解。1.模型:有已知推到未知,是我们常用的解题思路,好比数独中如果我们有了1~8那么剩下的格子必然是9了。动态规划也是这样的思路,眼下我们有一堆货物和一个容量有限的背包,那么如何装才能利益最大化便是我们需要考虑的问题。也就是背包问题。仔细思考,不难发现,每个物品都只有0与1(0表示不装,1表示装入)两个状态,那么一串二进制数就可以表示物品的装配方案(如0101表示只带上第2、4件物品)由此必有2

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

动态规划作为不同于其他类型的问题,有着它自己的解题思路以及模型,以下将围绕模型以及解题思路两方面进行讲解。

1.模型:有已知推到未知,是我们常用的解题思路,好比数独中如果我们有了1~8那么剩下的格子必然是9了。

动态规划也是这样的思路,眼下我们有一堆货物和一个容量有限的背包,那么如何装才能利益最大化便是我们需要考虑的问题。也就是背包问题。

仔细思考,不难发现,每个物品都只有0与1(0表示不装,1表示装入)两个状态,那么一串二进制数就可以表示物品的装配方案(如0101表示只带上第2、4件物品)由此必有2^n(n件物品)方案

如此枚举时间过于复杂,由此如何优化就成为了需要思考的问题,那么我们继续思考上面解题是枚举装配方案,如果我们能够优化装配判断的条件就可以达到优化的目的。如何判断呢?显然当我们在判断第i件物品时,肯定会选择上一次最佳方案(相同体积价值最高)再加上这一次的成本,也就是说我们当前装入与否取决于我们是否装得下,装不下显然我们跳过,装得下我们就得判断是装入好还是不装入好。

2.解题

有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。

第 i 件物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。

输入格式

第一行两个整数N,V,用空格隔开,分别表示物品数量和背包容积。

接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。

输出格式

输出一个整数,表示最大价值。

数据范围

0<N,V≤1000
0<vi,wi≤1000

输入样例

4 5
1 2
2 4
3 4
4 5

输出样例:

8

代码如下:

#include<stdio.h>

int n, m;
int f[1001], v, w;

int main()
{
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i ++)
	{
		scanf("%d%d", &v, &w);
		for(int j = m; j >= v; j--)
			if(f[j]<f[j-v] + w)
			    f[j] = f[j-v] + w;
			else f[j] = f[j];
	}
	printf("%d", f[m]);
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164405.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • arcgis最佳路径分析步骤_基于arcgis的住房选址分析

    arcgis最佳路径分析步骤_基于arcgis的住房选址分析使用ArcGISNetworkAnalyst模块进行最佳路径分析,可以根据不同的需求,进行相关设置,得到不同意义的最佳路径。例如,省汽油;省驾驶时间;省等待时间;交叉路口最少;自驾旅游可以规划沿途风景最好的路径等等。

    2022年8月24日
    11
  • MATLAB学习笔记 plotyy双y轴

    MATLAB学习笔记 plotyy双y轴一、线型设置:t=0:0.1:8;[ax,h1,h2]=plotyy(t,sin(t),t,cos(t));% plotyy(X1,Y1,X2,Y2):以左、右不同纵轴绘制X1-Y1、X2-Y2两条曲线。set(h1,’linestyle’,’-‘,’marker’,’o’,’color’,’r’);set(h2,’linestyle’,’:’,’marker’,’x’,’color’…

    2022年6月17日
    28
  • 光纤交换机配置zone[通俗易懂]

    光纤交换机配置zone[通俗易懂]B系列SAN交换机-Zoning配置信息型本文档提供了BrocadeSAN交换机zoning配置的分步骤指南。详细信息新建zone配置:a. 新建一个zoning配置,用cfgcreate命令。格式:cfgcreate“cfgname”,“zonename1;zonename2;…”举例:cfgcreate“cfg1”,“zone1;zone2”b. 新建一个zone,用zonecreate命令。格式:zonecreate“zone

    2022年5月22日
    36
  • secureCRT乱码问题

    一、乱码如下:1、输入命令控制台乱码,如下图所示。二、解决方式:1、点击SercureCRT上排主菜单的“Options”,也就是“选项”菜单,如下图:2、点击【Options】之后,会出现一个下拉列表,我们选择第一个“SessionOptions…”,如下图所示。3、在弹出框中选择目录中的“Appearance”,该功能可以对SercureCRT的外观进行设置,如下图所示。4、S…

    2022年4月6日
    148
  • linux设置法语键盘布局,法语键盘布局图「建议收藏」

    linux设置法语键盘布局,法语键盘布局图「建议收藏」《法语键盘布局图》由会员分享,可在线阅读,更多相关《法语键盘布局图(3页珍藏版)》请在人人文库网上搜索。1、法语键盘布局(适用环境:法语输入法,法语键盘布局)法语键盘布局介绍一、与英文键盘(普通键盘)的区别1.a和q的位置互换了2.z和W位置互换3.m和“分号和冒号键”是方便的表达方式,本文中提到的“特定键”是指国际标准键盘的键(即市场上销售的普通键盘键上印刷的字符),下同。“位置互换二。键盘上的…

    2025年8月14日
    1
  • vbs整人代码,表白+提醒 两段代码就OK

    vbs整人代码,表白+提醒 两段代码就OK在沉闷的工作环境下,有时玩玩整人代码也不错,整人代码一般使用VBS脚本来实现,简单的两行代码就可以实现表白+提醒了,不过大家也要警惕VBS脚本的危险性,下面小编分享的只是整人简单脚本,大家可以随便玩!并不损坏电脑文件。 先来第一段弹窗代码:MSGBOX“内容A”+CHR(13)+“内容B”+CHR(13)+“内容C”,1,“标题”将它们复制到文本中,将后缀改成“.VBS”就可以双…

    2022年5月7日
    126

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号