acwing 1715 桶列表

131 篇文章 0 订阅

题目

Farmer John 正在考虑改变他给奶牛挤奶的时候分配牛奶桶的方式。

他认为这最终能使得他使用数量更少的桶,然而他不清楚具体是多少,请帮助他!

Farmer John 有 NN 头奶牛,方便起见编号为 1…N1…N。

第 ii 头奶牛需要从时刻 sisi 到时刻 titi 之间挤奶,并且挤奶过程中需要用到 bibi 个桶。

多头奶牛可能在同一时刻都在挤奶;每个桶在每个时刻只能供一头奶牛使用。

也就是说,第 ii 头奶牛在时刻 sisi 到时刻 titi 之间挤奶时,如果用到了某个桶,则该桶在这段时间不能被其他奶牛使用。

当然,这个桶在这段时间之外可以被其他奶牛所使用。

为了简化他的工作,FJ 保证在任一时刻,至多只有一头奶牛开始或是结束挤奶(也就是说,所有的 sisi 和 titi 各不相同)。

FJ 有一个储藏室,里面有依次编号为 1、2、3、……1、2、3、…… 的桶。

在他的挤奶策略中,当某一头奶牛(比如说,奶牛 ii)开始挤奶(在时刻 sisi),FJ 就跑到储藏室取出编号最小的 bibi 个桶分配给第 ii 头奶牛用来挤奶。

请求出 FJ 需要在储藏室中存放多少个桶才能使得他能够顺利地给所有奶牛挤奶。

输入格式

输入的第一行包含 NN。

以下 NN 行,每行描述了一头奶牛,包含三个空格分隔的数 si,ti,bisi,ti,bi。

其中 sisi 和 titi 均为 1…10001…1000 之间的整数,bibi 为 1…101…10 之间的整数。

输出格式

输出一个整数,为 FJ 需要的桶的数量。

数据范围

1≤N≤1001≤N≤100

输入样例:
3
4 10 1
8 13 3
2 6 2
输出样例:
4
样例解释

在这个例子中,FJ 需要 44 个桶:他用桶 11 和桶 22 来给奶牛 33 挤奶(从时刻 22 开始)。

他用桶 33 给奶牛 11 挤奶(从时刻 44 开始)。

当奶牛 22 在时刻 88 开始挤奶时,桶 11 和桶 22 可以再次利用,然而桶 33 不可以,所以他会使用桶 11、桶 22 和桶 44。

解释和代码

根据题意,由于数据较少,可以新建一个桶,把 s i s_i si t i t_i ti的数量 b i b_i bi依次加上,然后遍历找max即可

#include <bits/stdc++.h>
#define pb          push_back
#define ppb         pop_back
#define lbnd        lower_bound
#define ubnd        upper_bound
#define endl        '\n'
#define all(a)      (a).begin(),(a).end()
#define what_is(x)  cerr << #x << " is " << x << endl;
#define ini(a)      memset(a,0,sizeof(a))
#define case        ll T;read(T);for(ll Q=1;Q<=T;Q++)
#define lowbit(x)   x&(-x)
#define pr          printf
#define sc          scanf
#define TIE \
    cin.tie(0);cout.tie(0);\
    ios::sync_with_stdio(false);

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double PI    = acos(-1.0);
const int    INF   = 0x3f3f3f3f;
const ll     LLINF = 0x3f3f3f3f3f3f3f3f;
const int    maxn  = 9990;
const ll     N     = 5;

int flag[maxn] = {0};

void solve(){
	int n, ans = 0;
	int s, t, b;
	cin>>n;
	for (int i=1; i<=n; i++) {
		cin>>s>>t>>b;
		for (int j=s; j<=t; j++) {
			flag[j] += b;
		}
	}
	for (int i=0; i<=1000; i++) {
		ans = max(ans, flag[i]);
	}
	cout<<ans<<endl;
}

int main()
{
//	TIE;

	solve();
//    case{solve();}
//    case{cout<<"Case "<<Q<<":"<<endl;solve();}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值