[CSP-S模拟测试]:开心的金明(贪心+模拟)
题目传送门(内部题117)
输入格式
第一行一个整数$k$,表示需要处理的月份数。
接下来的$k$行,每行$4$个整数,第$1+i$行分别为:$c_i,d_i,m_i,p_i$
接下来的$k-1$行,每行三个整数,其中第$1+k+i$行分别为:$e_i,R_i,E_i$。分别表示从第$i$月存到$i+1$月的数据。
输出格式
一行,包括一个整数。如果能够满足所有顾客的需求,输出最小成本。如果不能满足顾客需求,输出$-1$。
样例
样例输入1:
2
10 5 3 6
15 7 2 8
2 3 2
样例输出1:
170
样例输入2:
2
0 8 0 7
0 0 0 0
0 0 0
样例输出2:
-1
数据范围与提示
样例$1$解释:
在第一个样品测试用例中,第一个月,你可以购买$12$个单位的原材料,这需要花费$120$元,然后把其中的7个放入下个月的仓库,这需要花费$21$元。然后,你的公司可以生产$5$台电脑并销售,这需要$15$元。在第二个月,贵公司可以生产和销售$7$台,使用仓库中的原材料的电脑,需要$14$元。总成本为$170$元,证明是最优的。
数据范围:
对于$10\%$的数据,$k=2$;
对于$30\%$的数据,$k\leqslant 100$;
对于$50\%$的数据,$k\leqslant 1,000$;
对于$70\%$的数据,$k\leqslant 10,000$;
对于$100\%$的数据,$2\leqslant k\leqslant 50,000,0\leqslant c_i,d_i,m_i,p_i\leqslant 10^4,0\leqslant ei\leqslant 10^8,0\leqslant R_i,E_i\leqslant 10^4$。
题解
考虑贪心,最后剩余电脑数为$0$一定最优;购买的原材料数量和出售的电脑数一定相同。
因为原材料可以无限购买和存储,所以$c[i]=\min(c[i],c[i-1]+R[i-1])$。
那么考虑电脑,也可以用这样的方式处理;开一个$multiset$存储即可。
剩下的就都是模拟了。
时间复杂度:$\Theta(k\log\max(e[i]))$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
#define L(x) x<<1
#define R(x) x<<1|1
using namespace std;
struct rec{int c,d,m,p,e,R,E;}e[50010];
int n,size,lst;
multiset<pair<int,int>>s;
long long ans;
int main()
{
scanf("%d",&n);e[0].c=0x3f3f3f3f;
for(int i=1;i<=n;i++)scanf("%d%d%d%d",&e[i].c,&e[i].d,&e[i].m,&e[i].p);
for(int i=1;i<n;i++)scanf("%d%d%d",&e[i].e,&e[i].R,&e[i].E);
for(int i=1;i<=n;i++)e[i].c=min(e[i].c,e[i-1].c+e[i-1].R);
for(int i=1;i<=n;i++)e[i].m+=e[i].c;
for(int i=1;i<=n;i++)
{
s.insert(make_pair(e[i].m-lst,e[i].p));
size+=e[i].p;
while(e[i].d)
{
if(s.empty()){puts("-1");return 0;}
pair<int,int> x=*s.begin();
s.erase(s.begin());
size-=x.second;
if(e[i].d<x.second)
{
ans+=1LL*(x.first+lst)*e[i].d;
x.second-=e[i].d;e[i].d=0;
size+=x.second;
s.insert(x);
}
else
{
ans+=1LL*(x.first+lst)*x.second;
e[i].d-=x.second;
}
}
while(e[i].e<size)
{
pair<int,int> x=*--s.end();
s.erase(--s.end());
size-=x.second;
if(size<e[i].e)
{
x.second=e[i].e-size;
s.insert(x);
size+=x.second;
}
}
lst+=e[i].E;
}
printf("%lld",ans);
return 0;
}
rp++
[CSP-S模拟测试]:开心的金明(贪心+模拟)的更多相关文章
- codevs 1115 开心的金明--01背包
1115 开心的金明 2006年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购 ...
- 洛谷 P1060 开心的金明
开心的金明 Problem Description: 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些 ...
- Luogu 1060 开心的金明 / NOIP 2006 (动态规划)
Luogu 1060 开心的金明 / NOIP 2006 (动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨 ...
- 【洛谷p1060】开心的金明
(DP背包第一题,值得记录思路呀) 开心的金明[传送门] 洛谷算法标签: 01背包问题的思路分析见[总结]01背包问题 这道题显然是典型的01背包问题,首先我们显然可以由输入的第i个物体的价格v[i] ...
- P1060 开心的金明
P1060 开心的金明 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要 ...
- P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)
题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ...
- sicily 1342 开心的金明 (动规)
刷一下简单的背包问题 以下为代码: //1342. 开心的金明 #include <iostream> using namespace std; #define MAX(a,b) a> ...
- RQNOJ PID2 / 开心的金明
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”.今 ...
- 开心的金明 NOIP 2006 普及组
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就 ...
随机推荐
- 仿优酷项目—orm
仿优酷项目 一.ORM介绍 对象关系映射,把数据库中的表数据(表名.表记录.字段)全部映射到python中. mysql: python: 表名 ---->类名 记录 ----> ...
- 导入excel-uploadify+npoi
总结: 导入文件时一定要给database设置栏位 虚拟表的栏位名称可以与数据库表不一致,但顺序一定要一致,因为它是按照顺序依次插入的 sheet.FirstRowNum = 0; sheet.Fir ...
- 113、stack的优势 (Swarm20)
参考https://www.cnblogs.com/CloudMan6/p/8157391.html stack 将应用所包含的service,依赖的secret volume 等资源,以及他们之 ...
- java web实现同一账号在不同浏览器不能同时登录
网上看了很多方法,个人也看了,自己也总结了几个比较常用的: 前提都是用session监听器,对session的创建与销毁进行监听 一.在用户登录时保存该用户的状态有这几种保存方式: 1.保存到内存中( ...
- C#中实现Hash应用
在C#中,数据的Hash以MD5或SHA1的方式实现,MD5与SHA1都是Hash算法,MD5输出是128位的,SHA1输出是160位的,MD5比SHA1快,SHA1比MD5强度高. 1.1 SHA- ...
- appium基础之简单的小例子
appium环境搭建了,当然也要开始用起来了,记录一下学习的过程 遇到问题 1.The permission to start '.ui.home.view.HomeActivity' activit ...
- shell 删除文本中的重复行
三种常见方法:第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort -k2n file | uniq > a.out 这里我做了个简单的测试,当file中的重复 ...
- Linux下putenv()函数导致composer更新失败
bug复现: 原因: putenv() 函数设置特定的环境变量有可能是一个潜在的安全漏洞,所以这个函数在php配置文件中是默认禁止的,在 php.ini 中查找此函数,然后将此函数删除掉,重载配置即可 ...
- Let's write a framework.
Let's write a framework. create a model var model={a:1,b:'b'} let's create a router, router maps url ...
- 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...