题目描述

在比特镇一共有 \(n\) 家商店,编号依次为 \(1\) 到 \(n\)。

每家商店只会卖一种物品,其中第 \(i\) 家商店的物品单价为 \(c_i\),价值为 \(v_i\),且该商店开张的时间为 \(t_i\)。

\(Byteasar\) 计划进行 \(m\) 次购物,其中第 \(i\) 次购物的时间为 \(T_i\),预算为 \(M_i\)

每次购物的时候,\(Byteasar\) 会在每家商店购买最多一件物品,当然他也可以选择什么都不买

如果购物的时间早于商店开张的时间, 那么显然他无法在这家商店进行购物。

现在 \(Byteasar\) 想知道,对于每个计划,他最多能购入总价值多少的物品。请写一个程序,帮助 \(Byteasar\) 合理安排购物计划。

注意:每次所花金额不得超过预算,预算也不一定要花完,同时预算不能留给其它计划使用。

对于 \(100\%\) 的数据:

\(n, m \in [1,300]; c_i,M_i \in [1, 10^9]; vi,t_i,Ti \in [1,300]\)

观察数据发现不用开long long。

题解

显然因为\(c_i,M_i \leq 10^9\),不可能去做01背包。

那么我们离线排序处理询问,并按照时间递增的顺序DP。

每次对于一个物品,我们"倒做"01背包,即计算某个价值所需要的最小代价。

分析

考场一阵乱打,空间开小,\(20\)pts 滚粗。

后来还莫名奇妙的多动规了一次,导致变为 \(80\)pts 。

代码

#include <cstdio>
#include <algorithm> using namespace std; struct Mark{
int c, v, t;
bool operator < (const Mark &rhs) const {
return t < rhs.t;
}
} market[305]; struct Qry{
int t, m, id;
bool operator < (const Qry &rhs) const {
return t < rhs.t;
}
} qry[100005]; int g[90005];
int qans[100005]; inline void flush(int u){
for (int i = 90000; i >= market[u].c; --i){
if (g[i] > g[i - market[u].c] + market[u].v)
g[i] = g[i - market[u].c] + market[u].v;
}
for (int i = 90000; i >= 1; --i)
if (g[i] > g[i + 1]) g[i] = g[i + 1];
} int main(){
int n, m; scanf("%d %d", &n, &m);
for (int i = 1; i <= n; ++i)
scanf("%d %d %d", &market[i].v, &market[i].c, &market[i].t);
sort(market + 1, market + n + 1);
for (int i = 1; i <= m; ++i){
int t, m; scanf("%d %d", &t, &m);
qry[i] = {t, m, i};
}
sort(qry + 1, qry + m + 1);
for (int i = 1; i <= 90004; ++i) g[i] = 1000000007;
for (int i = 1, pos = 1; i <= m; ++i){
for ( ; market[pos].t <= qry[i].t && pos <= n; ++pos)
flush(pos);
qans[qry[i].id] = upper_bound(g, g + 90001, qry[i].m) - g - 1;
}
for (int i = 1; i <= m; ++i)
printf("%d\n", qans[i]);
return 0;
}

[HG]Market 题解的更多相关文章

  1. [HG]walk 题解

    前言 学长博客划水,抄题解,差评. 于是我来重新写一篇正常的题解,虽然解法跟标程不一样,但是复杂度是一样的. 题面 题目描述 在比特镇一共有\(n\)个街区,编号依次为\(1\)到\(n\),它们之间 ...

  2. [HG]AK 题解

    前言 什么鬼畜玩意,扶我起来,我要用__int128,这辈子都不珂能用龟速乘的... 真香. 题解 我们知道这个模数是个神奇的东西 \(2305843008676823040 = 2^{29} \ti ...

  3. [HG]子树问题 题解

    前言 模拟赛赛时SubtaskR3没开long long丢了20分. 题意简述 题目描述 对于一棵有根树(设其节点数为 \(n\) ,则节点编号从 \(1\) 至 \(n\) ),如果它满足所有非根节 ...

  4. [HG]走夜路 题解

    前言 整个机房就我一个人在想动态规划. 想了半天发现一堆性质,结果由于DP中出现折线挂了. 题目描述 某NOIP普及组原题加强版. \(Jim\) 非常怕黑,他有一个手电筒,设手电筒的电量上限为 \( ...

  5. [HG]腿部挂件 题解

    前言 暴力跑的比正解快. 以下暴力(循环展开+fread读入输出优化) #include<cstdio> #pragma GCC optimize(3, "Ofast" ...

  6. [HG]小G坐电梯 题解

    C 小G坐电梯 题目描述 小G来到了著名的某大厦.大厦一共有n层,初始的时候小G在第 A 层. 小G特别想去B层小 M 的办公室看一看,然而因为安保原因,B层已经被封锁无法进入. 但是小G既然来了,就 ...

  7. [HG]钻石游戏diamond 题解

    题面 钻石游戏(diamond) 问题描述: 一个\(M\)行\(N\)列的棋盘,里面放了\(M \times N\)个各种颜色的钻石. 每一次你可以选择任意两个相邻的颜色不同的钻石,进行交换.两个格 ...

  8. [HG]提高组 题解

    首先很容易想到暴力DP 设状态f[i][j]表示当前放了第i个数,最大的数为j的方案数. 然后根据转移推出实际上是在下图走路的方案数 \[ \left( \left( \begin{matrix} x ...

  9. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

随机推荐

  1. 利用commons-pool2自定义对象池

    一.为什么使用对象池   恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.commons-pool2是Apache下一个开源的公共资源池.我们可以根据它来快速的建立 ...

  2. 2019中山纪念中学夏令营-Day1[JZOJ]

    T1 题目描述: 1999. Wexley接苹果(apple) (File IO): input:apple.in output:apple.out 时间限制: 1000 ms  空间限制: 1280 ...

  3. 使用Python基于OpenCV的验证码识别

    Blog:https://blog.csdn.net/qq_40962368/article/details/89312429(Verification_Code_Identification) 步骤 ...

  4. Fire Net(HDU-1045)(匈牙利最大匹配)(建图方式)

    题意 有一个 n*n 的图,. 代表空白区域,X 代表墙,现在要在空白区域放置结点,要求同一行同一列只能放一个,除非有墙阻隔,问最多能放多少个点 思路 只有在墙的阻隔情况下,才会出现一行/列出现多个点 ...

  5. PHP 下载mysql数据到PHPExcel表格

    第一步:先到官网(https://github.com/PHPOffice/PHPExcel)下载PHPExcel 第二步:放到第三方库 第三步: /** * 封装:信息导出 * @param $da ...

  6. iOS资料大全

    1.创建自己的Xcode 模板类工程 https://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=2652155923&idx=1&am ...

  7. Python两个内置函数locals 和globals

    这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...

  8. Windows下nginx的启动,重启,关闭功能

    @echo off rem 提供Windows下nginx的启动,重启,关闭功能 echo ==================begin======================== cls :: ...

  9. Qt5.12.0交叉编译

    Qt5.12.0 交叉编译 源码配置 修改 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件 MAKEFILE_GENERATOR = UNIX C ...

  10. 00常见的Linux系统版本

    linux系统内核与linux发行套件系统并不相同: linux系统内核指的是一个由Linus Torvalds负责维护,提供硬件抽象层.硬盘及文件系统控制及多任务功能的系统核心程序. linux发行 ...