题目描述

  在比特镇一共有$n$家商店,编号依次为$1$到$n$。每家商店只会卖一种物品,其中第$i$家商店的物品单价为$c_i$,价值为$v_i$,且该商店开张的时间为$t_i$。
  $Byteasar$计划进行$m$次购物,其中第$i$次购物的时间为$T_i$,预算为$M_i$。每次购物的时候,$Byteasar$会在每家商店购买最多一件物品,当然他也可以选择什么都不买。如果购物的时间早于商店开张的时间,那么显然他无法在这家商店进行购物。
  现在$Byteasar$想知道,对于每个计划,他最多能购入总价值多少的物品。请写一个程序,帮助$Byteasar$合理安排购物计划。
  注意:每次所花金额不得超过预算,预算也不一定要花完,同时预算不能留给其它计划使用。


输入格式

  第一行包含两个正整数$n,m$,表示商店的总数和计划购物的次数。
  接下来$n$行,每行三个正整数$c_i,v_i,t_i$,分别表示每家商店的单价、价值以及开张时间。
  接下来$m$行,每行两个正整数$T_i,M_i$,分别表示每个购物计划的时间和预算。


输出格式

  输出$m$行,每行一个整数,对于每个计划输出最大可能的价值和。


样例

样例输入:

5 2
5 5 4
1 3 1
3 4 3
6 2 2
4 3 2
3 8
5 9

样例输出:

10
12


数据范围与提示

样例解释:

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

数据范围:

对于$100\%$的数据,$1\leqslant t_i,T_i\leqslant n$。


题解

对于正常的背包$DP$,我们都是设$dp[i][j]$表示选到第$i$个,背包空间为$j$所能获得的最大价值。

而对于这道题,背包空间很大,但是价值很小,所以我们不妨设$dp[i][j]$表示选到第$i$个,得到价值为$j$所消耗的最小背包空间。

对于时间,我们可以将物品和询问按时间排序,统一计算答案,然后在二分提取询问即可。

时间复杂度:$\Theta(n^2v+m\log m)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int c,v,t;}e[301];
struct node{int t,m,id;}q[100001];
int n,m;
int dp[100000];
int ans[100001];
bool cmp1(rec a,rec b){return a.t<b.t;}
bool cmp2(node a,node b){return a.t<b.t;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&e[i].c,&e[i].v,&e[i].t);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&q[i].t,&q[i].m);
q[i].id=i;
}
sort(e+1,e+n+1,cmp1);
sort(q+1,q+m+1,cmp2);
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
int j=1;
for(int i=1;i<=m;i++)
{
while(j<=n&&e[j].t<=q[i].t)
{
for(int k=n*300;k>=e[j].v;k--)
dp[k]=min(dp[k],dp[k-e[j].v]+e[j].c);
for(int k=n*300;k;k--)
dp[k]=min(dp[k],dp[k+1]);
j++;
}
ans[q[i].id]=upper_bound(dp+1,dp+n*300+1,q[i].m)-dp-1;
}
for(int i=1;i<=m;i++)
printf("%d\n",ans[i]);
return 0;
}

rp++

[CSP-S模拟测试]:Market(背包DP)的更多相关文章

  1. [CSP-S模拟测试]:B(DP+数学)

    题目传送门(内部题45) 输入格式 第一行$3$个整数$n,m,P$.第二行$m$个整数,表示$m$次询问. 输出格式 一行$m$个整数表示答案. 样例 样例输入1: 2 4 40 1 2 3 样例输 ...

  2. [CSP-S模拟测试]:蛇(DP+构造+哈希)

    题目传送门(内部题140) 输入格式 前两行有两个长度相同的字符串,描述林先森花园上的字母. 第三行一个字符串$S$. 输出格式 输出一行一个整数,表示有多少种可能的蛇,对$10^9+7$取模. 样例 ...

  3. [CSP-S模拟测试]:最小值(DP+乱搞)

    题目背景 $Maxtir$更喜欢序列的最小值. 题目传送门(内部题128) 输入格式 第一行输入一个正整数$n$和四个整数$A,B,C,D$. 第二行输入$n$个整数,第$i$个数表示$a_i$. 输 ...

  4. [CSP-S模拟测试]:花(DP)

    题目传送门(内部题111) 输入格式 一个整数$T$,表示测试数据组数. 每组测试数据占一行,两个整数,分别表示$L$和$S$. 输出格式 对每组数据,输出一个整数表示答案. 样例 样例输入1: 13 ...

  5. [CSP-S模拟测试]:计数(DP+记忆化搜索)

    题目描述 既然是萌萌哒$visit\text{_}world$的比赛,那必然会有一道计数题啦!考虑一个$N$个节点的二叉树,它的节点被标上了$1\sim N$的编号.并且,编号为$i$的节点在二叉树的 ...

  6. [CSP-S模拟测试]:matrix(DP)

    题目描述 求出满足以下条件的$n\times m$的$01$矩阵个数:(1)第$i$行第$1~l_i$列恰好有$1$个$1$.(2)第$i$行第$r_i~m$列恰好有$1$个$1$.(3)每列至多有$ ...

  7. [CSP-S模拟测试]:题(DP+数学)

    题目描述 出个题就好了.这就是出题人没有写题目背景的原因.你在平面直角坐标系上.你一开始位于$(0,0)$.每次可以在上/下/左/右四个方向中选一个走一步.即:从$(x,y)$走到$(x,y+1),( ...

  8. [CSP-S模拟测试]:题(DP)

    题目描述 由于出题人赶时间所以没办法编故事来作为背景.一开始有$n$个苹果,$m$个人依次来吃苹果,第$i$个人会尝试吃$u_i$或$v_i$号苹果,具体来说分三种情况.$\bullet 1.$两个苹 ...

  9. [CSP-S模拟测试]:y(DP+bitset)

    题目背景 $\frac{1}{4}$遇到了一道水题,叕完全不会做,于是去请教小$D$.小$D$懒得理$\frac{1}{4}$,直接就离开了.于是,$\frac{1}{4}$只好来问你,这道题是这样的 ...

随机推荐

  1. 小白学数据分析--聚类分析理论之K-means理论篇

    小白学数据分析--聚类分析理论之K-means理论篇 聚类分析是一类广泛被应用的分析方法,其算法众多,目前像SAS.Splus.SPSS.SPSS Modeler等分析工具均以支持聚类分析,但是如何使 ...

  2. linux .bashrc文件修改和生效

    linux .bashrc文件修改和生效   cd  home  ==>选择用户文件夹=>ll -la  .bashrc   使用man bash命令查看到的联机帮助文件中的相关解释如下: ...

  3. LCD应用程序测试

    #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl ...

  4. P1973 [NOI2011]Noi嘉年华

    传送门 首先可以把时间区间离散化 然后求出 $cnt[l][r]$ 表示完全在时间 $[l,r]$ 之内的活动数量 设 $f[i][j]$ 表示当前考虑到时间 $i$,第一个会场活动数量为 $j$ 时 ...

  5. apache2.4 只允许合法域名访问网站 禁止使用ip、非法域名访问

    1.ip访问禁用ip访问 只能对应端口有效<VirtualHost *:80> ServerName xx.xx.xx.xx ServerAlias * <Location /> ...

  6. Python之路-变量和基本数据类型详解(变量、数据类型、)

    一.注释 注释的作用: 增加程序的可读性 作为调试用 提高团队的合作效率 注释的分类 1.单行注释 以井号(#)开头,右边的所有内容当做说明 2.多行注释 以三对单引号(’’’注释内容’’’)将注释包 ...

  7. centos7 安装pip 和 Django过程

    [root@localhost ~]# yum install python-pip 已加载插件:fastestmirror Loading mirror speeds from cached hos ...

  8. spring data jpa和spring data redis同时配置时,出现Multiple Spring Data modules found, entering strict repository configuration mode错误

    问题说明 data jpa和data redis同时配置时,出现Spring modules spring Spring Data Release Train <dependencyManage ...

  9. 08-求解Ax=b:可解性和解的结构

    一.增广矩阵 假设我们要求解方程$Ax=b$,其中矩阵$A$和$b$如下所示: $A = \left[\begin{array}{llll}{1} & {2} & {2} & ...

  10. 脚本_使用awk提取linux主机参数

    #!bin/bash#功能:使用awk提取Linux主机的参数信息,如内容剩余容量,根分区剩余容量,本机IP,本机能登录的用户个数,CPU负载.#作者:liusingbon#使用awk提取内存剩余容量 ...