news 2026/8/2 4:35:38

洛谷P5662纪念品一题 的题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷P5662纪念品一题 的题解

由于此题是CSP-J考场上的一道题,我们不妨先假设自己是一名菜鸟考生,用一些比较新鲜的角度去做题。

正文

考试时会先干嘛呢?那一定是去看数据范围。CSP比GESP好的点就在于它不会让你输得太难看,总有几分是你水得到的。显然这里有10%的数据是很轻松就能做对的,就是当T=1(即小伟的神力有但完全没用,只能预测一天)时,他买纪念品却不能以更高的价格卖出,因为当天的价格是不变的,类似于炒股,所以他最后所持有的金币数与他最开始拥有的金币数是一样的。这里就先不给代码了。相信大家都是比我厉害的大佬

当然只水十分不太对得起我们辛苦的思考,考虑到T<=100,N=1时有15%的数据,意思是超能力持续天数变多但是只有一种商品,所以操作就是如果明天价格更贵,就用今天的钱买尽量多的纪念品,第二天再卖掉,所以第二天后手里有的金币数就该是今天能买到的*明天价格+今天余数,对应的代码如下:

intans=m;for(inti=0;i<t;i++){if(p[i+1][0]>p[i][0]){intcnt=ans/p[i][0];ans=ans%p[i][0]+cnt*p[i+1][0];}}cout<<ans;

进一步地,我们还能看到有15%的数据是T=2,也就是超能力持续两天,刚好够做一次交易。这时我们先来捋一捋思路:小伟手中金币数一定,也就是只能选择部分纪念品进行买卖,每种纪念品可以购买无数次(钱够),最后使得第二天卖出时利益最大,不难看出这是一个简单的完全背包问题,手里钱数是背包容量,今天的价格对应物品体积,明天价格则是物品价值,然后直接套完全背包模板就可以了。(如果第二天价格比今天还便宜,直接continue掉)

实际上这里做出来后,就很接近最后的AC代码了,因为取的是特殊值两天,我们就可以尝试把这T天分成两天一次的背包,即今天和明天,明天和后天…以此类推,要进行T-1次,不过每天都要更新手里的金币数。

完整代码:

#include<bits/stdc++.h>usingnamespacestd;intn,m,t;intp[105][105];voidcheck1(){intans=m;for(inti=0;i<t;i++){if(p[i+1][0]>p[i][0]){intcnt=ans/p[i][0];ans=ans%p[i][0]+cnt*p[i+1][0];}}cout<<ans;}voidcheck2(){intdp[1000005];memset(dp,0,sizeof(dp));for(inti=0;i<n;i++){intcost=p[0][i];intv=p[1][i]-cost;if(v<=0){continue;}for(intj=cost;j<=m;j++){dp[j]=max(dp[j],dp[j-cost]+v);}}cout<<m+dp[m];}voidcheck3(){intdp[100005];for(intd=0;d<t-1;d++){memset(dp,0,sizeof(dp));for(inti=0;i<n;i++){intcost=p[d][i];intv=p[d+1][i]-cost;if(v<=0){continue;}for(intj=cost;j<=m;j++){dp[j]=max(dp[j],dp[j-cost]+v);}}m+=dp[m];}cout<<m;}intmain(){cin>>t>>n>>m;for(inti=0;i<t;i++){for(intj=0;j<n;j++){cin>>p[i][j];}}if(t==1){cout<<m;return0;}if(n==1){check1();return0;}if(t==2){check2();return0;}//以上是前面的骗分环节,只保留check3也行check3();return0;}

注:老师作业要求,不喜勿喷

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 4:35:29

基于Arduino与GSM模块的复古电话DIY:硬件复现与通信实践

1. 项目缘起&#xff1a;当复古情怀遇上开源硬件 不知道你有没有过这样的感觉&#xff1a;现在的手机功能是越来越强&#xff0c;但拿在手里总觉得少了点什么。那种沉甸甸的金属质感&#xff0c;拨号时清脆的“咔哒”声&#xff0c;还有通话时那种纯粹的、不被各种通知打断的专…

作者头像 李华
网站建设 2026/8/2 4:35:12

为什么我只用国产模型:一套多 Agent 协作方案,4 分钱一次

一、单模型的瓶颈用了大半年 AI 写代码&#xff0c;我发现一个反复出现的问题&#xff1a;单个模型写的代码&#xff0c;我不敢直接用。不是代码不能用&#xff0c;而是——没有第二个人帮我看一眼。人类团队里&#xff0c;写完代码要 review&#xff0c;review 完要测试&#…

作者头像 李华
网站建设 2026/8/2 4:34:49

Unity XR凝视交互开发:从射线检测到多平台适配

1. 项目概述&#xff1a;AR/VR交互的核心——凝视与点击在AR和VR开发里&#xff0c;交互是连接虚拟世界与用户的桥梁。传统的键鼠操作在这里完全失效&#xff0c;开发者必须重新思考用户如何与虚拟内容“对话”。其中&#xff0c;凝视交互因其高度的沉浸感和符合直觉的特性&…

作者头像 李华
网站建设 2026/8/2 4:34:18

Cocos Creator 3.4.2环境搭建全攻略:从Node.js到VS Code的避坑指南

1. 项目概述&#xff1a;为什么需要一份详尽的Cocos Creator环境搭建指南&#xff1f;如果你正准备踏入Cocos Creator游戏开发的大门&#xff0c;或者刚从2.x版本升级到3.x&#xff0c;那么“环境搭建”这个看似简单的第一步&#xff0c;很可能就是你遇到的第一个“拦路虎”。我…

作者头像 李华
网站建设 2026/8/2 4:34:13

Jenkins共享库实现CI/CD统一管理

Jenkins Shared Library 学习笔记 一、核心概念 Jenkins Shared Library&#xff08;共享库&#xff09; 是Jenkins官方推荐的解决方案&#xff0c;用于将流水线逻辑抽取成独立的Git仓库&#xff0c;供多个项目统一引用 。当微服务数量超过5个时&#xff0c;每个项目各写一套…

作者头像 李华
网站建设 2026/8/2 4:33:07

基于STM32与Proteus的嵌入式仿真实践:无叶风扇台灯项目全解析

这次我们来看一个基于 STM32F103C8 微控制器和 Proteus 仿真软件实现的“无叶风扇台灯”项目。这个项目将两种常见的家用电器功能——风扇和照明——集成在一个虚拟设备中&#xff0c;并通过 OLED 显示屏和蓝牙模块实现状态显示与远程控制。对于学习嵌入式开发、单片机编程以及…

作者头像 李华