CSP 2019 第三题:纪念品

news2024/11/27 20:58:19

CSP 2019 第三题:纪念品
题目链接
题目:

在这里插入图片描述
题意:
数据给出能预测的天数,纪念品种类,持有金币。每天对金币进行买卖,求买卖后的金币最大值(如何赚得更多)
知识点考:
动态规划
思路:

  • 按照题意,能够知道赚得最多就是保证每天都赚最多就行。最简单想法就是第二天根据某纪念品的涨幅,先买涨价最多的,如果持有金币还有,就继续买涨价次之的币种(可以结构体排序,然后根据剩余一次购买)。这个方法真的很贪心,每次都是买“性价比”最高的,但是这个方法只能局部最优,举个例子:我有100元,某个纪念品初值25元,能赚6元,另一个纪念品初值20元,能赚5元。按照贪心算法,定是要买赚8元的,只赚64=24元,但是如果我买初值20元的,就是5*5=25。所以这个时候看出来,明显不是最优的。所以贪心算法求最值问题时,不一定能办到全部最优,个别样例倒是能过。
  • 涉及最值问题,存在重叠子问题时,优先想到用动态规划来做。
状态转移方程:
- 明确状态:每天根据买卖,金币会变化,根据金币大小选择买不买当天纪念品
- 明确选择:每天选择买卖时,通常是判断买某个纪念品后的利润+买之前持有金币的利润是否变大(每次买一个纪念品,这样遍历时就能判断是买纪念品A还是买纪念品B划算,而不是以为的买涨幅最大的纪念品)
- 明确数组或者dp函数定义:所以置数组dp[i]一维数组放每天金币为i时能求的利润最值就行

数据约束:
数据相对比较小,注意数组范围100就行
代码注意:

  • 如果是边输入数据边处理是否购买,那么i一定是从1开始,并且要处理第0排的数据,否则一开始dp数据就会不准确
  • 如果输入完数据,遍历时,i就从第二排开始就行
  • 最后每行处理完要初始化我们的dp数组

参考代码:

#include<bits/stdc++.h>
#define MAX_N 105
using namespace std;
int a[MAX_N][MAX_N];
//动态规划思想处理
int dp[10005] ={0};//结果只和金币m有关,dp[i]表示持有i个金币时利润最大值 
int main(){
	int t,n,m;
	cin>>t>>n>>m;	
	memset(a,1e4 ,sizeof(a));
	for(int i=1;i<=t;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j]; 
				int k0 = a[i][j]-a[i-1][j]; //差值>0才做记录 
				if(k0 > 0){ 
					for(int p=a[i-1][j];p<=m;p++){
						//记录最低金币到金币m区间买该金币后的收益
						dp[p] = max(dp[p] , dp[p-a[i-1][j]] + k0);//买之前的利润(当前金币下的最有买法)和买之后的利润做对比 
					} 
				}
		}
				m += dp[m];
//		初始化结构体
		memset(dp,0,sizeof(dp)); //每一行遍历完后就重置数组 
	} 
	cout<<m; 
	return 0;
}

贪心算法试了一下,果然是样例很多不会过,仅35%,不能AC;
贪心算法如下:

#include<bits/stdc++.h>
#define MAX_N 105
using namespace std;
int a[MAX_N][MAX_N];
//定义一个结构体数组,储存金币差值,和上一天的金币价格 ,金币遍历,从差值最高的开始 
struct stu{
	int k;//记录差值
	int m0;
}s[MAX_N];
int cmp(stu st1,stu st2){
	return  st1.k>st2.k;
} 
int main(){
	int t,n,m,mm=1e4;//mm存储一行的最小值 
	cin>>t>>n>>m;
//	处理第0排数据
	memset(a,1e4 ,sizeof(a));
	for(int i=1;i<=t;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j]; 
			if(j-1>=0){
				int k0 = a[i][j]-a[i-1][j]; //差值>0才做记录 
				if(k0 > 0){
					s[j].k = k0;//差值
					s[j].m0= a[i-1][j];//上一个数据的值 
					if(a[i-1][j]<mm) mm=a[i-1][j];
				}
			}
		}
		sort(s+1,s+n,cmp);
		int num =0,earn =0;//赚到的最多的金币+可能还能买到的 
		int beleft = m,p=1;
		while(beleft>=mm&&p<=n){
			if(beleft>=s[p].m0&&s[p].k>0){
				num = beleft/s[p].m0;
				earn +=  num*s[p].k;
				beleft -= num*s[p].m0;
			}
			p++;
		}
		m += earn;
		mm=1e4;//初始化; 
//		初始化结构体
		memset(s,0,sizeof(s));
	} 
	cout<<m; 
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零到一:使用低代码平台搭建设备保养管理系统,提升运维效率

设备作为企业生产线上不可或缺的“动脉”&#xff0c;其稳定、高效的运行状态直接关乎到产品的质量与交付速度。然而&#xff0c;设备在长期高负荷运作下&#xff0c;难免会出现磨损、故障等问题&#xff0c;这不仅会影响生产进度&#xff0c;还可能带来额外的维修成本与安全风…

微信小程序--实现地图定位---获取经纬度

(1) (2) (3) html: <view class"titleTwo" style"border: none;"><view class"fontSize30 invoiceTile">企业地址</view><view class"invoiceRight" bind:tap"tapChooseAddress" data-maptype"…

Android 在布局中tools使用

效果图 布局 <TextViewandroid:id"id/tv"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"你好&#xff0c;这是TextView"android:visibility"gone"app:layout_constraintStart_to…

tornado 下载文件,显示下载速度、已下载大小、剩余时间、进度条、文件总大小

tornado 下载文件&#xff0c;显示下载速度、已下载大小、剩余时间、进度条、文件总大小 初版解决中文文件名报错显示下载速度、已下载大小下载过程中显示文件总大小、剩余时间、进度条正常前进 初版 import asyncio import osimport aiofiles import tornado.webclass FileHa…

【算法刷题日志】1044 最长重复子串和75 颜色分类,

颜色分类 这题就是双指针法&#xff0c;指到1的时候就和p1进行交换&#xff0c;然后p1指针往前移动&#xff0c;指到0的时候就和p0指针进行交换&#xff0c;p0和p1同时往前移动&#xff0c;由于可能出现连续的0后面连续的1&#xff0c;所以为了避免1被交换到末尾&#xff0c;当…

conda-pack基于同一种操作系统的环境打包教程

打包环境总结 1.激活需要复制的虚拟环境 conda env list cd /home/ww/miniconda3/envs/ conda activate webtool 2.将虚拟环境打包&#xff0c;包名&#xff1a;webtool_test.tar.gz conda pack -n webtool -o webtool_test.tar.gz 3.创建虚拟环境文件夹&#xff0c;把打包的…

Python实现深度森林(Deep Forest)分类模型(deepforest分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着大数据时代的到来&#xff0c;机器学习技术在各个领域的应用变得越来越广泛。在许多实际问题中&am…

HCIP学习 | 广域网、OSPF基础

Days03&#xff08;24.8.4&#xff09;广域网技术 概述 广域网技术在数据链路层面针对不同的物理链路定义了不同的封装方式。‌ 对于局域网封装&#xff0c;‌主要有Ethernet 2&#xff08;‌基于TCP/IP开发&#xff09;‌和IEEE802.3&#xff08;‌基于OSI协议开发&#xff0…

红黑树的概念和模拟实现[C++]

文章目录 红黑树的概念一、红黑树的性质红黑树原理二、红黑树的优势和比较 红黑树的模拟实现构建红黑树的数据结构定义节点的基本结构和初始化方式插入新节点插入新节点的颜色调整颜色和结构以满足红黑树性质 红黑树的应用场景 红黑树的概念 一、红黑树的性质 红黑树是一种自平…

强类型语言、弱类型语言、静态类型语言、动态类型语言

强类型和弱类型&#xff0c;并没有严格绝对的界限&#xff0c;比如C/C这种典型的强类型语言&#xff0c;实际上也允许一些隐式类型传换。

一六二、记node-sass安装失败和node切换失败问题

1. 项目install失败 2. 查询问题 在stackoverflow查询到error /node_modules/node-sass: Command failed&#xff0c;明白是node版本和node-sass版本不匹配 查询自己的node版本 应该是node版本太高的问题 3. 切换node版本 使用n切换node版本失败 原因&#xff1a;而 n 默…

2-Linux系统概述

Linux系统概述 创始人——林纳斯托瓦兹&#xff0c;Linux诞生于1991年&#xff0c;作者上大学期间实现的&#xff0c;Linux的特点&#xff1a;开源、免费、拥有最为庞大的源码贡献者&#xff1b;Linux的吉祥物是企鹅 区别开源和闭源 开源&#xff1a;开放程序源代码&#xff0…

前端(五):前端工程化

前端工程化是指在企业级的前端开发项目中&#xff0c;把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 一、环境准备 &#xff08;一&#xff09;环境准备 1、Vue-cli&#xff1a;是Vue官方提供的一个脚手架&#xff0c;用于快速生成一个Vue的项目模板。 2、…

如何利用WMS仓储管理系统进行库存整合

在当今竞争激烈的市场环境中&#xff0c;库存管理已成为企业运营的核心环节之一。为了提高库存管理的效率&#xff0c;降低库存成本&#xff0c;并实现库存资源的有效整合&#xff0c;越来越多的企业开始转向采用WMS仓储管理系统解决方案这一智能化工具。本文将从库存整合的迫切…

矩阵获客时代,云微客布局SEO优化,提升企业搜索流量

矩阵这个词大家应该都不是第一次听了&#xff0c;毕竟现在互联网时代&#xff0c;想要在线上获客&#xff0c;矩阵就绕不过去的。现在&#xff0c;短视频已经成为了当下年轻人获取信息的重要途径&#xff0c;而对于商企来说&#xff0c;布局短视频矩阵不仅是线上获客、获取流量…

内网域森林之ProxyNotShell漏洞利用

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 在渗透测试过程&#xff0c;如果目标环境存在Exchange服务器&#xff0c;我们也需要测试是否存在已知的远程命令执行漏洞&#xff0c;这里首先介绍ProxyNotShell。 ProxyNotShell和之前…

60 函数参数——关键参数

关键参数主要指调用函数时的参数传递方式&#xff0c;与函数定义无关。 通过关键参数可以按参数名字传递值&#xff0c;明确指定哪个值传递给哪个参数&#xff0c;实参顺序可以和形参顺序不一致&#xff0c;但不影响参数值的传递结果&#xff0c;避免了用户需要牢记参数位置和…

战锤40K极速狂飙怎么领 战锤40K极速狂飙免费喜加一入库教程

steam喜加一。游戏名称叫做《战锤40K&#xff1a;极速狂飙&#xff08;Warhammer 40,000: Speed Freeks&#xff09;》&#xff0c;这是一款背景设定在《战锤40K》宇宙中的竞速游戏&#xff0c;玩家将驾驶装载着炸裂性武器和强大能力的车辆&#xff0c;在肾上腺素爆棚的竞速比赛…

非标自动化ARM供控制器用于绕线机控制解决方案

在现代工业生产中&#xff0c;绕线机是一种广泛应用的设备&#xff0c;用于制造各种线圈和绕组。而绕线机的控制精度和速度直接影响到产品的质量和生产效率。ARMxy 嵌入式电脑作为一种高性能的控制设备&#xff0c;为绕线机控制带来了新的标准。 ARMxy 嵌入式电脑采用了先进的嵌…

计算机毕业设计选题推荐-课程教学平台-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…