CodeVS 1155 金明的预算方案 题解

【题解】 金明的预算方案 (NOIP 2006 提高组 第二题) 题目来源:洛谷 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑 打印机,扫描仪 书柜 图书 书桌 台灯,文具... 阅读详情

分组背包问题

时间复杂度:O(M*N/10)

空间复杂度:O(N/10)

 

#include <cstdio>
#include <memory.h>
using namespace std;

int N, M;
int v, p, q;
int tmp, Sum, Max;

struct THING{
	bool Main;
	short int num;
	int Sum[4];
	int V[4];
}thing[60+2];

int f[3200+2];

int main() {
	scanf("%d %d", &N, &M);
	for(int i = 1; i<=M; ++i){
		scanf("%d %d %d", &v, &p, &q);
		Sum = v*p;
		v /= 10;
		if(q==0){
			thing[i].Main = true;
			for(int j = 0; j<4; ++j) thing[i].Sum[j] += Sum;
			for(int j = 0; j<4; ++j) thing[i].V[j] += v;
		}
		else{
			tmp = ++thing[q].num;
			thing[q].Sum[tmp] += Sum; thing[q].Sum[3] += Sum;
			thing[q].V[tmp] += v; thing[q].V[3] += v;
		}
	}

	for(int i = 1; i<=M; ++i){
		if(!thing[i].Main) continue;
		for(int j = N/10; j>=1; --j){
			Max = f[j];
			for(int k = 0; k<4; ++k){
				tmp = j-thing[i].V[k];
				if(tmp<0) continue;
				if((f[tmp]+thing[i].Sum[k])>Max) Max = f[tmp]+thing[i].Sum[k];
			}
			f[j] = Max;
		}
	}	
	
	printf("%d\n", f[N/10]);
    	return 0;
}	return 0;
}


 

 

 

金明的预算方案 —— 题解 Description   金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 N 元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:     主件  |  附件     --------... 阅读详情

相关推荐

积分java源码-FTC11515_RoverRuckus:FTC11515_RoverRuckus

积分java源码欢迎! 此 GitHub 存储库包含用于构建 Android 应用程序以控制FIRST Tech Challenge 竞赛机器人的源代码。 要使用此 SDK,请将整个项目下载/克隆到本地计算机。 如果您不熟悉 FIRST Tech Challenge 软件和控制系统,您应该访问在线 wiki 以了解如何安装、配置和使用软件和控制系统: 请注意,维基是一个不断更新和编辑的“常青”文档。 它包含有关FIRST Tech Challenge 软件和控制系统的最新信息。 下载项目 需要注意的是,此存储库很大,下载可能需要很长时间并占用大量空间。 如果您想节省时间和空间,您可以选择仅下载最新版本的 Android 项目文件夹的一些选项: 如果您是 git 用户, FIRST建议您使用 --depth 命令行参数仅克隆存储库的最新版本: git clone --depth=1 或者,如果您愿意,可以使用主存储库页面提供的“下载 Zip”按钮。 将项目下载为 .ZIP 文件将使下载的大小易于管理。 您还可以从此存储库的“发布”页面的“下载”小节下载项目文件夹(作为 .zip 或 .t

**leetcode刷题_(DP,backtraking)_code1155(掷骰子)

CODE1155:Number of Dice Rolls With Target Sum You have d dice, and each die has f faces numbered 1, 2, …, f. Return the number of possible ways (out of fd total ways) modulo 10^9 + 7 to roll the dice ...

weixin_39238424的博客 2298

unity转微信小游戏:使用CDN加载游戏(微信开发者工具云开发CDN)

unity转微信小游戏:使用CDN加载游戏(微信开发者工具云开发CDN)

会潜水的小火龙的博客 3071

mysql Error Code:1175异常解决方法

如果你要批量更新或删除数据,一般会报 'Error Code: 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column' 错误,因为是MySQL Workbench的默认的安全设置是不能批量更新表的。当要执行的SQL语句是进行批量更新或者删除的时候就会提示这个错误。

牧魂的博客 3059

OpenFeign, Zuul, Gateway相互不兼容的问题总结

版本 Lib Vresion spring-cloud-starter-gateway 3.1.0 spring-cloud-dependencies 2021.0.0 spring-cloud-starter-netflix-zuul 2.2.6.RELEASE spring-cloud-starter-openfeign 3.1.0 1. Zuul 与OpenFeign 一起使用的问题 错误信息 jav.

Harry的博客 4131

LabVIEW与MySQL的连接:软件下载与安装至UDL文件创建全过程

依据个人经验编辑的十分完备的使用教程

tiaowudexiaoyu的博客 5573

P1064 [NOIP2006 提高组] 金明的预算方案——解题报告

2.由于题目中构成主从依赖关系,如果不选择主物品,那么附属物品也不能选择。所以相当于我们选择物品的时候是一组一组进行的。状态转移的时候便可以分组转移了,这便是一个典型的分组背包问题。给定总钱数n,和可供选择的m个物品,物品之间构成主从关系,如果要买附属品,则必须购买他的前置物品,也就是主物品。1.很显然这是一个背包问题的变种,所以方法在第一时间就确定下来了,我们采用DP的方式来完成这道题。=0时,自己便是主物品。3.因为存在整组不选,或者选则一定选主物品,所以我们应当在转移和状态中体现这一点。...

风中的微尘的博客 569

基于51单片机的贪吃蛇游戏设计

本科时候做的一个课程作业,自己打一个很简易的电路,比较有意思且易上手,故将之记录下来。(全套的仿真及代码,演示视频,课程报告以及PPT展示上传在优快云下载区) 一. 实验目的 (1) 通过对C51语言的理解,编写程序实现对贪吃蛇的有效控制; (2) 通过对51单片机硬件的学习,学会运用面包板,独立按键、点阵屏等,完成对完整电路的搭建过程; (3) 通过对Proteus仿真软件的学习,实现基于STC89C52单片机的8*8点阵贪吃蛇的硬件电路仿真。 二. 实验介绍 贪吃蛇是一款经典小游戏,其游戏的规则是:玩

山山の十三先生 2万+

【日常学习】【背包DP】codevs1155 金明的预算方案题解

题目来源:2006NOIPTG 题目描述 Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

西家家 1104

CubeMX配置ADC+DMA避坑实战:如何避免采样过快导致的系统崩溃

本文针对STM32开发中常见的ADC采样过快导致程序卡死问题,提供了基于CubeMX的实战避坑指南。通过分析ADC与DMA协作机制,详解时钟配置、采样时间、DMA缓冲区长度及中断设置等关键步骤,帮助开发者从源头规避系统崩溃风险,实现稳定可靠的数据采集。

weixin_28273593的博客 324

从充电管理芯片里‘偷师’:拆解一个PMOS双向开关电路,搞定你的固态继电器需求

本文深入解析了PMOS双向开关电路在固态继电器应用中的设计要点,重点探讨了防电流倒灌和高侧双向开关的实现技巧。通过拆解充电管理芯片中的PMOS背靠背结构,工程师可以构建高效可靠的固态开关方案,适用于智能硬件和电池管理系统。文章还提供了关键参数选择、电路优化建议及实测数据对比,助力解决电源防反接等工程难题。

weixin_33698043的博客 481

codevs 1155 金明的预算方案——来自深夜的挫败- -

codevs 1155 金明的预算方案——来自深夜的挫败- - 没想到到了今天的最后时刻我还是没把这题做出来。最开始以为可能有3个附件,觉得自己枚举6种组合,代码太冗余了,就不想这么写。于是乎去写了一次错误的动态规划,原因是没有看清楚背包问题中,对于每个物品选或者不选的选择,它都会更次一次0-V的所有dp[i]. 后来忍不住喵一下题解,看到了所谓的组合背包,我就傻傻地把每种组合当作一种新的物品用新

I feel lost 537

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)

目录 一、ATK-LORA-01无线串口资料 二、代码移植 1.分析 (1)usart3(也可以是其他的串口)用于接收数据的串口 usart.h (2)time3(也可以是其他的定时器)用于时序的设置 (3)lora.c 三、演示 1.主机(发送方) (1)主机接线 (2)主机代码(发送方) (3)主机实物 插上无线串口通电即可发送​ 2.从机(接收方) (1)从机接线(LORA与主机相同) (2)从机代码(接收方) (3)从机实物 接上TTL和LORA并通电即...

m0_56942354的博客 8966

Codevs 1155 金明的预算方案

题目: http://codevs.cn/problem/1155/ 题解: 想要购买附件,必须购买主件。 由于某主见最多拥有两个附件,所以可以枚举情况,分组背包。 如主件 x 有附件 x1 , x2 ; 有 x, x+x1, x+x2, x+x1+x2 四种情况,这四种情况是互相排斥的,只能选择一种,符合分组背包要求; 预处理貌似有点复杂,求指导代码简洁化; 正解还可以用有依赖的背

Mercury的博客 406

CasADi - 最优控制开源 Python/MATLAB 库

CasADi 是一款开源软件工具,用于数值优化,特别是最优控制(即涉及微分方程的优化)。该项目由 Joel Andersson 和 Joris Gillis 在鲁汶工程大学工程优化中心 (OPTEC) 在读博士生在 Moritz Diehl 的指导下发起。本文档旨在简要介绍 CasADi。

机器人控制与仿真应用 7932

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案

[codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案 试题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是...

weixin_30525825的博客 132

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【codevs1155】金明的预算方案

开始我的想法是对于加了附件的物品当成新的做,结果发现好像并不行啊,会有重复计算的存在 所以直接01背包是不行了,然后我看到网上的题解,有两种方法,一种是分组背包(看起来处理好麻烦qwq),还有种是树形背包,正好没学过2333333,来愉快的学一下 这个题如果用树形背包来做的话,是把主件当成根节点,建一棵树,因此就避免了重复计算,但是如果只是这样会形成森林,因此我们把0作为所有主件的根节点 ...

weixin_30257433的博客 114

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

codevs 1155今明的预算方案(复习有依赖性的背包问题)

1155 金明的预算方案 【题目大意】买附件必须买主件。 在一定钱数内 求总价值最大。 【题解】有依赖性的背包问题。 【code】 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> u...

weixin_30617737的博客 94

【题解】金明的预算方案

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过。根据题意,如果要买归类为附件的物品,必须先买该附件所属的主件,对于每个主件及其附件,我们不难想到。(个人习惯,下同),而 01 背包的物品数则就是主件的个数(包含主件的附件),物品的价格。元的前提下,使每件物品的价格与重要度的乘积的总和最大。,除此之外,由于物品的重量不定(如,主件和主件加附件。请你帮助金明设计一个满足要求的购物单。

shimingxin1007的博客 1685

Leetcode 1155. 掷骰子的N种方法(DAY 42) ---- 动态规划学习期

原题题目 代码实现(首刷自解) int numRollsToTarget(int d, int f, int target){ int** dp = (int**)malloc(sizeof(int*) * (d+1)),i,j,k,temp,maxnumber = 0; for(i=1;i<=d;i++) { dp[i] = (int*)malloc(sizeof(int) * (target+1)); memset(dp[i],0,si

Love 6's Private Blog 417

[NOIP2006 提高组] 金明的预算方案解析

题目链接 题意 金明有n元钱,最多允许购买m件物品。物品分为两类:主件和附件。规定:每个主件有0、1或2个附件,每个附件只对应一个主件,附件没有自己的附件。给出每件物品的价格,重要度,和从属关系,求出所选物品的价格与重要度乘积最大值。 题目分析 这是一道有依赖的背包问题。 仅考虑一个主件和它的附件集合,可选的策略最多有以下五种: 不选 仅选主件 — 物品1 选主件+附件1 — 物品2 选主件+附件2 — 物品3 选主件+附件1+附加2 — 物品4 问题转化成了分组背包,每组中最多有4种物品,组内的物

C++ static类成员 297

P1064 [NOIP 2006 提高组] 金明的预算方案——依赖背包

本文分析了两个背包问题的解题方法。首先介绍了简化版"开心的金明"问题,通过将物品价值乘以重要度转化为标准01背包问题。然后重点讨论了强化版"金明的预算方案",该问题增加了主件与附件的依赖关系。文章详细阐述了变量存储、主附件判断、编号排序等处理步骤,并给出了四种可能的购买组合情况。最后提供了强化版问题的完整代码实现,采用依赖背包算法解决主附件组合问题,时间复杂度为O(n^2)。文末还推荐了类似题目供进一步练习。

2401_90042730的博客 833

Leetcode 1155. 掷骰子的N种方法 (经典背包)

class Solution { const int MOD = (int)1e9 + 7; public: int numRollsToTarget(int d, int f, int target) { vector<vector<int>> dp(d+1, vector<int>(target + 1)); dp[0][0] = 1; for (int i = 1; i <= d; i++) ...

wwxy1995的博客 372

LeetCode 1155. 掷骰子的N种方法 每日一题

LeetCode 1155. 掷骰子的N种方法 每日一题

lishifu_的博客 955

Leetcode 1155. 掷骰子的N种方法

Leetcode 1155. 掷骰子的N种方法 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, ..., f。 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。 如果需要掷出的总点数为 target,请你计算出有多少种不同的组合情况(所有的组合情况总共有 f^d 种),模 10^9 + 7 后返回。 示例 1: 输入:d = 1, f = 6, target = 3 输出:1 示例 2: 输入:d = 2, f = 6, target = 7 输出:6 示

weixin_43891775的博客 340

Leetcode1155:掷骰子的N种方法

Leetcode1155:掷骰子的N种方法 题目: 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k 。 给定三个整数 n , k 和 target ,返回可能的方式(从总共 kn 种方式中)滚动骰子的数量,使正面朝上的数字之和等于 target 。 答案可能很大,你需要对 109 + 7 取模 。 思路:分组背包 代码如下: class Solution { int mod = (int)1e9+7; public int numRoll

immortalize的博客 400
上一篇: CodeVS 1063 合并果子 题解
下一篇: CodeVS 1102 采药 题解
Coder.AN
博客等级 码龄9年 8粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值