您的位置:首页 > 其它

jzoj 2016.12.26 noip模拟赛A 总结

2016-12-26 19:40 357 查看
思维有点辣鸡,一题都想不出来,只能一鼓作气三题暴力了,第三题的50分暴力还打错了,真是蠢

T1

有N家洗车店从左往右排成一排,每家店都有一个正整数价格Pi。

有M个人要来消费,第i个人会驶过第Ai个开始一直到第Bi个洗车店,且会选择这些店中最便宜的一个进行一次消费。但是如果这个最便宜的价格大于Ci,那么这个人就不洗车了。

请给每家店指定一个价格,使得所有人花的钱的总和最大。

我们应当想到他具有区间可合并性,只需要处理横跨两个区间的人就可以了。

所以区间DP,设f[l,r,k]为现在已经处理到了区间[l,r],其中最小值为k的答案。k只需要离散化一下就可以了。

不难知道

f[l,r,k]=min(max(f[l,p−1,k..maxk])+max(f[p+1,r,k..maxk])+g[p][k]∗value[k])

其中g表示,有g[i,j]个人横跨了i这个位置,且这j个人的上限都大于等于j。

T2

现在你有N个数,分别为A1,A2,…,AN,现在有M组询问需要你回答。每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K(1<=K<=N,不存在输出-1)满足以下两个条件:

①能够在原来的N个数中选出不重复(下标不重复)的K个数,使得这K个数的和在区间[L,R]内。

②能够在原来的N个数中选出不重复(下标不重复)的K个数,使得这K个数的和不在区间[L,R]内。

首先题目给出了一个蜜汁条件

保证Max{Ai}-Min{Ai}<=R-L

我们应该通过这个条件得出,值相邻的选k个的方案间隔必定小于R-L。

就相当于求 和在l之前方案 的最大k1取值(显然是按小到大取最优),与直线在l之后的最小k2的取值

1..k1,k2..n重叠的那一部分就意味着是取k个的最小方案与最大方案是两线分居的,这样必定有解。其余情况必定无解。

对于r同理。

T3

我们应当注意到区间的可合并性,线段树维护一个区间[l,r]的左边连续个数与右边连续个数等11个值,pascal打上10000byte,c++打4000byte即可ac此题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: