HDU 2126 Buy the souvenirs (贪心&0-1背包最优解的个数)

算法设计与分析—贪心法求解背包问题C++(学习笔记) #include<iostream> #include <algorithm> using namespace std; typedef struct { //利用结构体联系w和v int w; int v; }act; bool Comp(act a, act b) { return a.v > b.v; //比较排序 } int KnapSack(act *a, int n, int c) { int i; do. 阅读详情

http://acm.hdu.edu.cn/showproblem.php?pid=2126


由于身上的钱相当于背包容量,价格相当于重量,由于我们要买尽量多的物品,所以每件物品的价值就为1

在价值都相等的情况下,我们可以用贪心的思想求出最多能买多少件物品——排个序就行了

最后就是怎么就最优解的方案数,如下:

for (j = 0; j <= maxw; ++j) selection[j][0] = 1;///没买就是1
for (i = 0; i < n; ++i)
	for (j = maxw; j >= w[i]; --j)
	{
	    ///所有物品的价值都为1
		if (dp[j - w[i]] + 1 > dp[j])///说明可以买更多的物品,此时替换方案数
		{
			dp[j] = dp[j - w[i]] + 1;
			selection[j][dp[j]] = selection[j - w[i]][dp[j] - 1];
		}
		else if (dp[j - w[i]] + 1 == dp[j])///说明可以增加方案数
            selection[j][dp[j]] += selection[j - w[i]][dp[j] - 1];
	}
return selection[maxw][k];

完整代码:

/*15ms,304KB*/

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int w[35], dp[505], selection[505][35], k;

///计算买k件物品的方案数
int _01pack(int n, int maxw)
{
    int i, j;
	memset(dp, 0, sizeof(dp));
	memset(selection, 0, sizeof(selection));
	for (j = 0; j <= maxw; ++j) selection[j][0] = 1;///没买就是1
	for (i = 0; i < n; ++i)
		for (j = maxw; j >= w[i]; --j)
		{
		    ///所有物品的价值都为1
			if (dp[j - w[i]] + 1 > dp[j])///说明可以买更多的物品,此时替换方案数
			{
				dp[j] = dp[j - w[i]] + 1;
				selection[j][dp[j]] = selection[j - w[i]][dp[j] - 1];
			}
			else if (dp[j - w[i]] + 1 == dp[j])///说明可以增加方案数
                selection[j][dp[j]] += selection[j - w[i]][dp[j] - 1];
		}
	return selection[maxw][k];
}

int main()
{
	int t, i, n, maxw,sum;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d%d", &n, &maxw);
		for (i = 0; i < n; ++i) scanf("%d", &w[i]);
		sort(w, w + n); ///贪心
		sum = k = 0;
		for (i = 0; i < n; ++i)
		{
			sum += w[i];
			if (sum > maxw) break;
			++k;
		}
		if (k == 0) puts("Sorry, you can't buy anything.");
		else printf("You have %d selection(s) to buy with %d kind(s) of souvenirs.\n", _01pack(n, maxw), k);
	}
	return 0;
}

DLSS 5 移植 RTX 40:多帧生成技术原理与配置实践 深度学习超采样(DLSS)是英伟达利用 Tensor Core 实现画面重建与帧生成的关键技术。其帧生成能力不断进化,从单帧插值到多帧生成,显著提升高负载游戏的流畅度。但最新多帧生成技术官方仅开放给 RTX 50 系列,硬件门槛引发广泛讨论。近期泄露的 SDK 配置显示,RTX 40 系列可通过修改帧生成参数与硬件检查开关,实现民间级“DLSS 5”移植。本文从基础原理出发,拆解多帧生成的技术路径,分析移植的可行性和风险,并给出了实际操作步骤与工程建议,帮助玩家和开发者在理解技术本质的前提下,安全尝试性能提 阅读详情

相关推荐

C++应用贪心算法求解背包问题

C++应用贪心算法求解背包问题,可用于算法课程设计答辩。

贪心法--背包问题(不是0/1背包问题)

课后习题-----------习题七第1题 问:用贪心法求解如下背包问题的最优解:有7个物品,重量分别为(2,3,5,7,1,4,1),价值分别为(10,5,15,7,6,18,3),背包容量W=15。写出求解过程。 答:       1、单价分别为(5,5/3,3,1,6,4.5,3);      按单价的大小分别为重量和价值重新排序! 排序为:      重量:(1,2,4,5,1

YuJie1996 1万+

0-1背包动态规划&amp;部分背包贪婪算法

编程语言:C语言 编程软件:Microsoft Visul C++ 6 操作系统:Windows 8.1 有5个物品,其重量分别是{2, 2, 6, 5, 4},价值分别为{6, 3, 5, 4, 6},背包的容量为10,求装入背包的物品和获得的最大价值。 通过编程,学习用0-1背包的动态规划和部分背包的贪婪算法解决以上问题。

贪心法求解背包问题

问题描述:7个物品,重为{2,3,5,7,1,4,1},价值为{10,5,15,7,6,18,3},背包容量W=15,求最优解。 思路:将物品按单重价值降序排列,装满为止。 C++代码: #include&amp;lt;iostream&amp;gt; #include&amp;lt;iomanip&amp;gt; using namespace std; int KnapSack(int w[],int v[],in...

arthu6的博客 4085

用贪心法求解背包问题的解决方法

贪心方法:总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。应用:1:该问题可以通过&ldquo;局部寻优&rdquo;逐步过渡到&ldquo;整体最优&rdquo;,这是贪心选择性质与&ldquo;动态规划&rdquo;的主要差别。2:最优子结构性质:某个问题的整体最优解包含了&ldquo;子&rdquo;问题的最优解。完整的代码如下: 代码如下:#include &ldquo;iostream&rdquo;using namespace std;struct goodinfo{&nbsp;float p; //物品效益&nbsp;float w; //物品重量&nbsp;float X; //物品该放的数量&nbsp;int flag; //物品编号};//物品信息结构体void Insertionsort(goodinfo goo

ArcGIS实战:用栅格数据为偏远山区规划一条最省钱的公路(附完整数据与操作步骤)

本文详细介绍了如何利用ArcGIS进行栅格数据分析,为偏远山区规划一条最省钱的公路。通过DEM高程数据处理、成本权重设定和最佳路径计算,结合真实案例展示了从数据准备到工程方案转化的完整流程,帮助工程师在复杂地形中做出经济高效的路线决策。

weixin_32136203的博客 357

贪心法例题

今日白嫖 1/∞ ???? 01背包 //贪心法求解背包问题 /* 7 15 2 10 3 5 5 15 7 7 1 6 4 18 1 3 */ struct thing{ int w=0; int p=0; double wp=0; }; bool cmp(thing &amp;t1, thing &amp;t2){ return t1.wp&gt;t2.wp; } void pro_1(){ int n=0, size=0; scanf("%d%d",&amp;n, &amp;s

Janus 379

Python中的字典(Dictionary)学习

上一章节,我们学习了列表(List) 和 元组(tuple) 来表示有序集合。而我们在讲列表(list)的时候,我们用了列表(list) 来存储用户的姓名。那么如果我们为了方便联系这些童鞋,要把电话号码也添加进去,该怎么做呢?但是这样很不方便,我们把电话号码记录下来,就是为了有什么事能及时联系上这些童鞋。如果用列表来存储这些,列表越长,我们查找起来耗时就越长。

热情、奔放、快乐编程! 503

背包问题(贪心算法)

步骤代码: """ 已知背包问题如下: n = 7, W = 15, w = (2, 3, 5, 7, 1, 4, 1), v = (10, 5, 15, 7, 6, 18, 3) 求该问题的最优解和最优值 """ # 建立函数 def Greedy_knapsack(Weight, w, v): table = list() # 获取关系列表 arr = get_w_v(w, v) sum = 0 # 逐行进行遍历比较 for i in range(l..

m0_53245772的博客 2066

ESD防护设计宝典(二十三):ESD与EOS失效差异分析

ESD和EOS是电子制造业面临的两大挑战,随着电子产品向更高集成度、更低工作电压和更高工作频率发展,这一问题将更加突出。根据美国军方上世纪八十年代与可靠性分析中心(RAC)共同建立的现场失效返回程序(FFRP)统计数据,产品现场返回中EOS占比高达46%,而ESD仅占6%,另有6%的案例难以区分是EOS还是ESD。

m0_56451176的博客 322

知识图谱设计简记

知识图谱是一种语义化的知识表示框架,通过实体-关系-属性三元组形式表达现实世界关联。其核心价值在于关联化整合数据、支持可解释性推理和赋能智能化应用。知识图谱可分为通用型和领域型两类,基本构成包括实体、关系、属性等基础元素,以及本体和实例等架构层元素。设计方法主要有自上而下、自下而上和混合式三种,需遵循业务导向、一致性等原则。在建模时需要明确属性与实体的判断标准,规范处理关系的方向性与对称性,并合理构建多重关系。主流技术框架如RDF和属性图体系均支持多重关系建模,选择需考虑业务需求。本体作为知识图谱的概念骨架

生活在别处 362

hdu 2126 Buy the souvenirs(求方案数)

Problem Description When the winter holiday comes, a lot of people will have a trip. Generally, there are a lot of souvenirs to sell, and sometimes the travelers will buy some ones with pleasure. N

happy_lcj 805

【目标检测】全局上下文感知的详解

目标检测中的全局上下文感知(Global Context Awareness)​是指模型在定位和识别目标时,能够有效利用图像中全局或大范围的上下文信息(如场景语义、目标间关系、空间布局等),而不仅仅依赖局部特征。这种能力显著提升了检测的鲁棒性,尤其是在复杂场景(如遮挡、小目标、密集目标)中表现突出。

浩瀚之水的专栏 647

贪心算法-背包问题

贪心算法:当前最优解   例如在删除数的一个例子中,一个长度不大于240位的整数中,随机删除N个数,要求使得剩余的数: 从左到右的,组成一个最小的整数  贪心步骤: 例如 一个数: 1457326      N=4 1).找到当前最大的数: 7 删除;145326 2).找到当前最大的数: 6 删除;14532 3).找到当前最大的数: 5 删除;1432 4).找到当前最大的数:

这片海的博客 1766

Codex 桌面端自定义模型列表为空 — 修复记录

摘要:Codex桌面端首次启动正常,但二次启动后出现中文界面且模型列表丢失。问题根源在于Electron的Chromium持久化状态损坏,导致UI渲染异常。解决方案包括:1) 将config.toml中的模型路径改为绝对路径;2) 删除损坏的状态文件.codex-global-state.json;3) 清除Chromium用户数据目录AppData\Roaming\Codex\web。验证显示修改后模型功能恢复正常,重装无效的原因是卸载未清除用户数据目录。

猿小白的博客 1154

webrtc进阶-- FlexFEC 实现原理与调试分析(m80 代码对齐版)

WebRTC 中 FlexFEC 技术解析与调试指南 摘要:本文深入分析 WebRTC 的 FlexFEC(灵活前向纠错)技术实现原理,重点探讨其在 m80 版本中的协商机制、接收侧恢复流程以及 SFU 场景下的特殊处理。文章指出 FlexFEC 通过动态冗余策略提升弱网抗丢包能力,详细解析了编解码器分配、SSRC 映射、包恢复等关键环节,并提供了针对 XR+SFU 场景的调试建议。调试时可重点关注 FEC 包接收与媒体包恢复日志,以验证链路有效性。

HOSTEN的博客 49

背包问题贪心算法求解

题目 有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 思路 具有最优子结构性质和贪心选择性质。只要是所有物品的总重量大于背包容纳量,那么背包一定能装满。注意背包问题与0-1背包问题的区别。 这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。 求解步骤 用...

practical_sharp的博客 6万+

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 463

贪心算法解决背包问题

题目: 用贪心算法实现背包问题的求解。背包容量为20;最优解为装入背包的物品价值总和最大。 基本思想: 计算所有物品的性价比 按物品性价比从高到低装入,只有当高一级的性价比物品全部装入后,才会装入下一级的性价比物品。 装到最后无法全部装入该物品时进行部分装入 代码结果: 代码如下: package algorism4; public class GreedyBag {// 贪心算法解决的背包问题是可以部分装载的问题,不是0-1 static float maxV = ...

xuexijinhua的博客 6875

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

背包问题——贪心算法

// 分别以不同起点开始进行以当前最优的策略选择,直到依次遍历所有的开始点 // An highlighted block #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define MAXSIZE 60 bool HasExist(int Exist[],int len,int flag){ for (int i = 0; i &lt; len; i++) { if(Exist[i]==flag)

qq_35424507的博客 510

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

算法学习--部分背包问题(贪心)

问题描述 有一个背包,背包容量是 M =150,有 7 个物品,物品可以分割成任意大小,要求尽可能让装入背包中的物品总价值最大,但不能超过总容量 思路:按照物品性价比排序,性价比高的尽量多拿 #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;vector&gt; u...

淋雨一直走的博客 1736

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

4-2 背包问题(贪心)

首先计算每种物品单位重量的价值vi/wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未达到w,则选择单位重量价值次高的物品并尽可能多地装入背包。依此策略一直地进行下去直到背包满重为止。算法的主要计算时间在于将各种物品依其单位重量的价值从大到小排序。与0-1背包问题类似,所不同的只是在选择物品i装入背包时,可以选择物品的一部分而不一定要全部,1≤i≤n。因此,算法的计算时间上界为排序的时间复杂度O(nlogn)。

我走的每一步都算数 723

基于贪心算法的背包问题

转载:http://blog.youkuaiyun.com/urtheappleinmyeye/article/details/19269455【题目】 有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 物品 A B C D E F G 重量 35 30 60 50 40 10 25

公子不白的blog、 756

用贪心算法解决背包问题

贪心算法:顾名思义,贪心算法总是能做到当前看来是最好的选择。也就是说贪心算法并不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,是贪心算法与动态规划算法的主要区别。 0-1背包问题 给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为W。问应...

wangmengmeng99的博客 2万+

hdu 2126 Buy the souvenirs

Problem acm.hdu.edu.cn/showproblem.php?pid=2126 题意 n 种物品,m 元钱,每种只能买一个,要求在能买得到的最多物品种类的方案数 分析 在用 dp 求最多种类数时,顺便记录方案数。求最多种类数就是 0/1 背包。 当买下新物品可以取得更多种类数时,要同时更新方案数;如果钱数相同,买下新物品和不买有相同种类数,说明找到买这么多种物品的新

iTom's blog 444

贪心背包问题

Problem Description 有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 物品  A  B  C  D  E  F  G 重量  35  30  60  50  40  10  25 价值  10  40  30  50  35  40  30 分析: 目标函数: ∑pi最大 约束

古古天的博客 1299
上一篇: POJ 2184 Cow Exhibition (想法题&双变量0-1背包)
下一篇: HDU 2639 Bone Collector II (0-1背包第k优解)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值