题目描述

在比特镇一共有 \(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. 关于一个查询的JAVA界面,希望对你有启发

    package work2; import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; ...

  2. dual Oracle兼容

    CREATE OR REPLACE VIEW dual ASSELECT NULL::"unknown"WHERE 1 = 1;

  3. hbase启动后HMaster几秒后死掉

    通过 http://s128:16010 无法访问Hbase Web端 查看master日志,有报错: 2019-08-30 16:27:35,137 ERROR [master/s128:16000 ...

  4. Http option 请求是怎么回事

    在前后台分离的项目中,经常会遇到浏览器想服务端发送一个post/patch请求,实际上产生了两个请求,一个是Option,另一个才是真实的Post/Patch请求, 而get请求则不会产生Option ...

  5. MySQL性能优化(六):分区

    原文:MySQL性能优化(六):分区 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...

  6. Linux(17):Shell编程(4)

    案例1:批量生成随机字 符 文件名案例 使用for 循环在 /neo 目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串 neo创建的结果名称示例 如下: [root ...

  7. RSA 加密长度计算公式

    The length of data that can be encrypted using RSA is determined primarily by the size of the key yo ...

  8. pycharm terminal打开在虚拟环境

    pycharm调试是虚拟环境,terminal不是虚拟环境,搞了好久,原来需要激活一下 cd   venv\Scripts> 去虚拟环境的Script目录下,运行activate.bat激活环境 ...

  9. 第二十三篇 jQuery 学习5 添加元素

    jQuery 学习5 添加元素   同学们,这节课,使用jQuery动态添加元素,是很关键的一课,一般用在什么地方呢:别人发表一篇文章,你评论楼主的时候,总不能是提交表单,到后台的其他页面处理,然后再 ...

  10. 从命令行运行postman脚本

    为什么要在命令行中运行 可以在无UI界面的服务器上运行 可以在持续集成系统上运行 运行准备 导出collection 安装nodejs和npm(或cnpm) 安装Newman 运行及生成测试报告支持4 ...