这题很有思维难度,乍一看基本无从下手。

给每个蔬菜钦定退役的时间显然很困难,可以考虑让时光倒流,从后向前递推,然后就变成了某个时间点有一部分蔬菜服役,而已经服役的蔬菜不会退役了。然后就可以直接考虑贪心,每种第一个出现的蔬菜,显然可以单独考虑,加上s[i],然后把蔬菜放到堆里面,就可以在O(pmlogn)的复杂度下求出f[p]了,用堆维护即可,假定p=1e5。

然后发现这个玩意可以递推求解,第p-1天在役的蔬菜一定不少于第p天的,显然只需去掉利润最少的m个即可。

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=1e5+;
typedef long long ll;
typedef pair<int,int>pii;
struct node{int v,x;}st[N];
bool operator<(node a,node b){return a.v<b.v;}
int n,m,T,P=1e5,top,sum,a[N],s[N],c[N],x[N],used[N];
ll ans[N];
bool vis[N];
vector<int>d[N];
priority_queue<node>q;
int main()
{
scanf("%d%d%d",&n,&m,&T);
for(int i=;i<=n;i++)scanf("%d%d%d%d",&a[i],&s[i],&c[i],&x[i]);
for(int i=;i<=n;++i)if(!x[i])d[P].pb(i);else d[min(P,(c[i]+x[i]-)/x[i])].pb(i);
for(int i=P;i;i--)
{
for(int j=;j<d[i].size();j++)q.push((node){a[d[i][j]]+s[d[i][j]],d[i][j]});
if(q.empty())continue;
int j=m;
while(j&&!q.empty())
{
node u=q.top();q.pop();
if(!vis[u.x])
{
vis[u.x]=,ans[P]+=u.v,used[u.x]++,--j;
if(c[u.x]>)q.push((node){a[u.x],u.x});
}
else{
int rest=min(j,c[u.x]-used[u.x]-(i-)*x[u.x]);
ans[P]+=1ll*rest*u.v,used[u.x]+=rest,j-=rest;
if(used[u.x]!=c[u.x])st[++top]=(node){a[u.x],u.x};
}
}
while(top)q.push(st[top--]);
}
while(!q.empty())q.pop();
for(int i=;i<=n;i++)sum+=used[i];
for(int i=;i<=n;i++)
if(used[i]==)q.push((node){-s[i]-a[i],i});else if(used[i])q.push((node){-a[i],i});
for(int i=P-;i;i--)
{
ans[i]=ans[i+];
while(sum>i*m&&!q.empty())
{
node u=q.top();
q.pop(),u.v*=-;
if(used[u.x]>)
{
int rest=min(sum-i*m,used[u.x]-);
used[u.x]-=rest,sum-=rest,ans[i]-=1ll*rest*u.v;
if(used[u.x]==)q.push((node){-a[u.x]-s[u.x],u.x});
else q.push((node){-a[u.x],u.x});
}
else sum--,used[u.x]--,ans[i]-=u.v;
}
}
for(int i=,x;i<=T;i++)scanf("%d",&x),printf("%lld\n",ans[x]);
}

[NOI2017]蔬菜(贪心+递推)的更多相关文章

  1. CF822D 贪心+递推

    CF822D [题目链接]CF822D [题目类型]贪心+递推 &题意: 给你n个人,你可以把他们分组,但必须保持每组相等,分组之后每2个人会比赛,比如一组有i个人,那么就要比赛 次,f[i] ...

  2. 【51Nod】1519 拆方块 贪心+递推

    [题目]1519 拆方块 [题意]给定n个正整数,\(A_i\)表示第i堆叠了\(A_i\)个石子.每轮操作将至少有一面裸露的石子消除,问几轮所有石子均被消除.\(n \leq 10^5\). [算法 ...

  3. codeforces 735C Tennis Championship(贪心+递推)

    Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C ——每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...

  4. BZOJ.4946.[NOI2017]蔬菜(贪心 离线)

    题目链接 因为有删除,考虑倒序处理某个p的询问. 那么每天删除xi的蔬菜就变成了每天运来xi的蔬菜.那么我们取当前最优的即可,早取晚取都一样,不需要留给后面取,还能给后面更优的留出空间. 这样就只需考 ...

  5. [NOI2017]蔬菜 贪心

    题面: [NOI2017]蔬菜 题解: 首先每天蔬菜会变质这点并不好处理,我们考虑让时间倒流,从后向前处理,这样的话就相当于每天都会得到一定量的蔬菜. 这样做有什么好处呢? 我们可以发现一个性质:如果 ...

  6. 2019 ICPC南京网络赛 F题 Greedy Sequence(贪心+递推)

    计蒜客题目链接:https://nanti.jisuanke.com/t/41303 题目:给你一个序列a,你可以从其中选取元素,构建n个串,每个串的长度为n,构造的si串要满足以下条件, 1. si ...

  7. NOI2017蔬菜(贪心)

    小 N 是蔬菜仓库的管理员,负责设计蔬菜的销售方案. 在蔬菜仓库中,共存放有 n 种蔬菜,小 N 需要根据不同蔬菜的特性,综合考虑各 方面因素,设计合理的销售方案,以获得最多的收益. 在计算销售蔬菜的 ...

  8. 【BZOJ4946】[NOI2017]蔬菜(贪心)

    [BZOJ4946][NOI2017]蔬菜(贪心) 题面 BZOJ 洛谷 UOJ 题解 忽然发现今年\(NOI\)之前的时候切往年\(NOI\)的题目,就\(2017\)年的根本不知道怎么下手(一定是 ...

  9. [NOI2017]蔬菜——时光倒流+贪心

    题目链接 题解: 貌似一眼看过去是一个贪心. 其他的算法要记录的东西就太多了. 部分分其实很高.但是没有什么提示. 想一些套路:二分?不行还要贪心判断. 分治?前后取法是有影响的. 时光倒流? 也许可 ...

随机推荐

  1. zigbee CC2530首选方案模组:TZU06A1

    模块特点 微型24-pin 邮票式SMT 封装 提供U.FL 接口,用于外接SMA 天线 小尺寸封装:16mm*20mm*3.7mm 通过欧盟CE0168.欧盟ROHS 认证 基于8051 单片机架构 ...

  2. 洛谷P4427 [BJOI2018]求和

    \(\Large\textbf{Description: } \large{一颗n个节点的树,m次询问,每次查询点i到点j的路径上所有节点点深度的k次方的和并对998244353取模(1\leq n, ...

  3. 使用nginx做反向代理来访问tomcat服务器

    本次记录的是使用nginx来做一个反向代理来访问tomcat服务器.简单的来说就是使用nginx做为一个中间件,来分发客户端的请求,将这些请求分发到对应的合适的服务器上来完成请求及响应. 第一步:安装 ...

  4. vux 中 this.$vux.loading undefined 的问题

    时间:2018-04-03 摘要:this.$vux.loading 报 undefined 今天在使用 事件触发 vux 的 loading  组件时,发现无法触发成功,显示 undefined 然 ...

  5. 用ftp命令实现主机文件批量更新

    我们的主机环境是windows 2003,平时程序员访问都喜欢用远程桌面.简单快捷直观.不过我比较喜欢在本地用vim和命令行,这样编辑修改不需要受网络影响. 这种情况下,我本地调试的程序,要经常更新到 ...

  6. 响应式布局rem的使用

    在如今移动端,响应式布局的时代,用rem作为单位已经是非常普及的一门小技巧了..rem的单位根据html的font-size来进行换算! 1.rem的兼容性: 如下图所示IE9以上就支持了rem这个属 ...

  7. A convenient way to recognize and handwrite multidimensional arrays in Numpy

    As a new learner of Numpy, it is very common to be confused by the form of array, braces nested in b ...

  8. CSS层级关系 学习笔记

        CSS 文档流   格式化上下文 Formatting Context 即初始元素定义的环境 块格式化上下文  Block Formatting Context BFC 行内格式化上下文   ...

  9. tools.eclipse.内存配置

    环境:jdk1.7+eclipse luna 选择:Run ->Run Configurations, 在弹出框右侧中选择Arguments, 在VM arguments最后加入 -Xms256 ...

  10. Mysql 终端中文显示乱码

    查看编码 show variables like 'char%'; 结果 +--------------------------+--------+ | Variable_name | Value | ...