Market

article/2025/10/22 3:50:32
Problem B. Market(market.c/cpp/pas)
Input file: market.in
Output file: market.out
Time limit: 1 seconds
Memory limit: 128 megabytes
在比特镇一共有n 家商店,编号依次为1 到n。每家商店只会卖一种物品,其中第i 家商店的物品
单价为ci,价值为vi,且该商店开张的时间为ti。
Byteasar 计划进行m 次购物,其中第i 次购物的时间为Ti,预算为Mi。每次购物的时候,Byteasar
会在每家商店购买最多一件物品,当然他也可以选择什么都不买。如果购物的时间早于商店开张的时间,
那么显然他无法在这家商店进行购物。
现在Byteasar 想知道,对于每个计划,他最多能购入总价值多少的物品。请写一个程序,帮助
Byteasar 合理安排购物计划。
注意:每次所花金额不得超过预算,预算也不一定要花完,同时预算不能留给其它计划使用。
Input
第一行包含两个正整数n;m,表示商店的总数和计划购物的次数。
接下来n 行,每行三个正整数ci; vi; ti,分别表示每家商店的单价、价值以及开张时间。
接下来m 行,每行两个正整数Ti;Mi,分别表示每个购物计划的时间和预算。
Output
输出m 行,每行一个整数,对于每个计划输出最大可能的价值和。
Examples
market.in 
5 2
5 5 4
1 3 1
3 4 3
6 2 2
4 3 2
3 8

5 9

market.out

10
12
第一个计划可以在商店2,3,5 各购买一件物品,总花费为1 + 3 + 4 = 8,总价值为3 + 4 + 3 = 10。

第二个计划可以在商店1,2,3 各购买一件物品,总花费为5 + 1 + 3 = 9,总价值为5 + 3 + 4 = 12。


题解

60%

先把查询排序,然后边做背包边回答(最后再排回去)

f[i][j]表示的是考虑了前i个商店,花费小于等于j

复杂度O(NM)

100%

看了题解才会的。。

我们发现对于后40%的数据,c[i](花费)很大但v[i](获得的价值)很小,于是修改状态为:

f[i][j]表示考虑了前i个商店,获利恰好为j时,所用的最小化费(初始设为正无穷)

方程f[i][j]=min(f[i-1][j],f[i-1][j-v[i]]+c[i])

于是对于每一个询问M,直接从后往前扫描,找到第一个小于等于M的值,其下标就是答案

复杂度O(N*N*v[max])

这里这么设置主要是因为考虑到60%时候的方程,当M变大时,v依然很小,于是考虑把下标和数组的值更换一下位置

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxn 310
#define maxv 90000
#define inf ((long long)1<<60)
#define ll long long
using namespace std;
ll f[maxv+100], n, m;
struct quiry
{ll M, T, num, ans;bool operator<(quiry x)const{return T==x.T?M>x.M:T<x.T;}
}q[100010];
struct item
{ll c, v, t;bool operator<(item x)const{return t<x.t;}
}it[350];
void init()
{ll i, j;scanf("%lld%lld",&n,&m);for(i=1;i<=n;i++)scanf("%lld%lld%lld",&it[i].c,&it[i].v,&it[i].t);for(i=1;i<=m;i++)scanf("%lld%lld",&q[i].T,&q[i].M),q[i].num=i;sort(it+1,it+n+1);sort(q+1,q+m+1);
}
void work()
{ll i, j, k, t, l, r, mid;quiry *p;for(i=1;i<=maxv;i++)f[i]=inf;for(p=q+1;p->T<it[1].t;p++)p->ans=0;for(i=1,it[n+1].t=inf;i<=n;i++){for(j=maxv;j>=it[i].v;j--)f[j]=min(f[j],f[j-it[i].v]+it[i].c);for(;p->T<it[i+1].t and p->num<=m;p++){for(j=(p-1)->T==p->T?j:maxv;f[j]>p->M;j--);p->ans=j;}}
}
bool cmp(quiry a, quiry b){return a.num<b.num;}
int main()
{init();work();sort(q+1,q+m+1,cmp);for(ll i=1;i<=m;i++)printf("%lld\n",q[i].ans);return 0;
}



http://chatgpt.dhexx.cn/article/gcmfljDx.shtml

相关文章

COMTRADE录波数据导入MATLAB分析的方法

各路大佬发表了很多用Python编程、MATLAB编程实现COMTRADE录波数据提取的方法&#xff0c;对我这种小白来说属实是看不懂&#xff08;也不想去看&#xff09;&#xff0c;只想怎么快点把数据提取出来做研究。 这里介绍一种极其简单的数据提取方法&#xff0c;简单到完全不需要编…

TraDeS解读

这篇TraDeS是MOT领域的新作&#xff0c;收录于CVPR2021&#xff0c;作者来自纽约州立大学等机构&#xff0c;在多个基准任务上均达到SOTA水平&#xff0c;包括2D跟踪、3D跟踪和分割级跟踪。 简介 大多数现有的online MOT方法的检测部分在整个网络中都是独立进行的&#xff0c;…

swing版电力系统故障录波comtrade文件离线分析软件

电力系统的故障录波comtrade格式的文件的分析软件&#xff0c;swing实现。 功能包括&#xff1a; 1、支持打开标志的电力系统故障录波comtrade格式文件。 2、可对波形进行横向放大缩小、纵向放大缩小和复原的功能&#xff1b; 3、可以向上、向下移动波形&#xff0c;以及叠加多…

python 联合国农产品数据分析

目录&#xff1a; 一、项目描述 二、项目环境 三、项目步骤 四、项目实现 4.1、创建一个需求文档存放需求文件&#xff0c;文件内包含本次项目的所有需求 4.2、新建一个配置文件config.py&#xff0c;用来存放配置条目&#xff0c;如农产品的种类、所查询的年份、进口国、…

[Python] 使用 UN Comtrade API 高效获取数据

本文最初写成于 2021 年 7 月&#xff0c;由于作者的拖延问题以致今天才得以和各位同学&#xff08;即便大概率是自说自话了&#xff09;见面&#xff0c;因此文中具体细节可能已经发生变化。 Cover Photo by Maksym Kaharlytskyi on Unsplash 使用 UN Comtrade API 批量下载数…

Python实现comtrade文件读取

最近在学习python&#xff0c;发现这个语言挺有意思&#xff0c;写起来比较轻松。后面打算用它代替matlab来做数据分析。写了一个comtrade格式录波文件的读取类。目前仅支持读取comtrade的binary格式文件。仅读取模拟量&#xff0c;不解析开关量。上comtrade类代码。 #!/usr/b…

Comtrade格式录波数据显示

本文介绍几种comtrade格式的电力录波查看方法&#xff0c;并给出相关的下载链接 这几个软件的具体使用方法就不一一详述了&#xff0c;最后给出使用MATLAB GUI的录波数据查看步骤 具体还是要自己动手实现 几个软件实现效果图以及相关下载链接 仅供参考 ScopeView Download 效…

COMTRADE格式录波数据分析以及函数实现(一)

一、首先&#xff0c;看一下COMTARDE是什么 COMTRADE是IEEE标准电力系统暂态数据交换通用格式。标准为电力系统或电力系统模型采集到的暂态波形和事故数据的文件定义了一种格式。该格式意欲提供一种易于说明的数据交换通用格式。IEEE于1991年提出&#xff0c;并于1999进行了修…

如何申请免费SSL证书?宝塔面板SSL证书安装部署完整教程

如何申请免费SSL证书&#xff1f;宝塔面板SSL证书安装部署完整教程 现在很多网站都由原来的http://www.xxx.com转换为https://www.xxx.com&#xff0c;这就是说从http协议转到了https协议。如果说网站不是https协议&#xff0c;Chrome浏览器会提示不安全。https比http协议安全性…

HTTPS证书及其安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 HTTPS证书及其安装 HTTPS证书一、 试查http协议1启动jmeter&#xff0c;添加测试元件1&#xff09;添加缓存管理器2&#xff09;添加cookie管理器3&#xff09;添加http请求默…

【Linux】宝塔面板 SSL 证书安装部署

宝塔面板 SSL 证书安装部署 前言证书下载宝塔配置SSL注意事项 前言 前期有讲过Tomcat和Nginx分别部署SSL证书&#xff0c;但也有好多小伙伴们私信我说&#xff0c;帮忙出一期宝塔面板部署SSL证书的教程&#xff0c;毕竟宝塔的用户体量也是蛮大的&#xff0c;于是宠粉的博主&am…

宝塔面板 SSL 证书安装部署

注册与购买域名-Tencent Cloud 腾讯云、华为云、阿里云等都可以购买域名并备案做dns解析。需要主要&#xff1a;域名的购买可以任意选云服务厂商&#xff0c;但是dns解析时只能指向dns服务商的主机。简单的说&#xff1a;腾讯云的dns服务器可以解析腾讯云的云服务器(ECS),不能…

javaScript中的鼠标事件

鼠标点击事件 onclick单击事件 鼠标单击时事件处理函数 <input type"button" id"bt" value"点击"> <script> //找到按钮并设置点击事件document.getElementById("bt").onclick function (){//被点击后弹出弹出框alert…

JavaScript鼠标事件与函数

通过鼠标触发事件&#xff0c;类似用户的行为&#xff1a; 鼠标事件列表&#xff0c;要在(body)里设一个div,id名要为box&#xff0c;style里设置它的的宽、高&#xff0c;然后再script里设置脚本语言&#xff0c;使他在里面能够运行。下面script都例了鼠标每一样事件&#xff…

java鼠标js触发事件吗,JavaScript鼠标事件是什么?JavaScript鼠标事件详解

js中是比较简单的语言&#xff0c;然而js的精髓就是js事件&#xff0c;这也是js当中最重要的部分&#xff0c;很多人对JavaScript鼠标事件是什么还不是很了解&#xff0c;下面我们对JavaScript鼠标事件进行详解。 一&#xff1a;在js中&#xff0c;鼠标事件有很多&#xff0c;其…

Js鼠标事件与函数

鼠标事件&#xff08;Mouse Events&#xff09; 通过鼠标触发事件, 类似用户的行为: 鼠标事件列表&#xff0c;要在body里设一个div&#xff0c;id名要为box&#xff0c;style里设置它的宽、高&#xff0c;然后再script里设置脚本语言&#xff0c;使它在里面能够运行。下面scr…

JS鼠标事件(非常详细)

这里写目录标题 一、 常用到的鼠标事件鼠标点击鼠标移动鼠标经过鼠标来源鼠标定位鼠标按键 一、 常用到的鼠标事件 在 JavaScript 中&#xff0c;鼠标事件是 Web 开发中最常用的事件类型&#xff0c;鼠标事件类型详细说明如下表所示&#xff1a; 鼠标事件类型 项目Valueclick…

JS鼠标事件实现动效

1 JS鼠标事件 click鼠标点击事件 事件对象.onclickfunction() {}mousedown / mouseup 鼠标按下/松开事件 事件对象.onmousedown function() {}mouseenter / mouseleave 鼠标移入/移出事件mouseover / mouseout 鼠标移入移出mousemove 鼠标移动事件mousewheel 滚轮滚动事件 注…

JavaScript鼠标事件

JavaScript鼠标事件 js中是比较简单的语言&#xff0c;然而js的精髓就是js事件&#xff0c;这也是js当中最重要的部分&#xff0c;很多人对JavaScript鼠标事件是什么还不是很了解&#xff0c;下面我们对JavaScript鼠标事件进行详解。 鼠标事件&#xff08;Mouse Events&#…

Linux运维之zabbix(四)onealert云告警平台

Linux运维之zabbix&#xff08;四&#xff09;onealert云告警平台 什么是云告警平台&#xff1f; 可以通过微信、邮件等快速接入各类警告信息&#xff0c;通过降噪、聚类、分派、通知、排班等功能&#xff0c;提高告警管理能力 云告警平台的部署 百度搜索oneallert&#xf…