CF F. Shovels Shop(前缀和预处理+贪心+dp)
2 seconds
256 megabytes
standard input
standard output
There are nn shovels in the nearby shop. The ii -th shovel costs aiai bourles.
Misha has to buy exactly kk shovels. Each shovel can be bought no more than once.
Misha can buy shovels by several purchases. During one purchase he can choose any subset of remaining (non-bought) shovels and buy this subset.
There are also mm special offers in the shop. The jj -th of them is given as a pair (xj,yj)(xj,yj) , and it means that if Misha buys exactly xjxj shovels during one purchase then yjyj most cheapest of them are for free (i.e. he will not pay for yjyj most cheapest shovels during the current purchase).
Misha can use any offer any (possibly, zero) number of times, but he cannot use more than one offer during one purchase (but he can buy shovels without using any offers).
Your task is to calculate the minimum cost of buying kk shovels, if Misha buys them optimally.
The first line of the input contains three integers n,mn,m and kk (1≤n,m≤2⋅105,1≤k≤min(n,2000)1≤n,m≤2⋅105,1≤k≤min(n,2000) ) — the number of shovels in the shop, the number of special offers and the number of shovels Misha has to buy, correspondingly.
The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤2⋅1051≤ai≤2⋅105 ), where aiai is the cost of the ii -th shovel.
The next mm lines contain special offers. The jj -th of them is given as a pair of integers (xi,yi)(xi,yi) (1≤yi≤xi≤n1≤yi≤xi≤n ) and means that if Misha buys exactly xixi shovels during some purchase, then he can take yiyi most cheapest of them for free.
Print one integer — the minimum cost of buying kk shovels if Misha buys them optimally.
7 4 5
2 5 4 2 6 3 1
2 1
6 5
2 1
3 1
7
9 4 8
6 8 5 1 8 1 1 2 1
9 2
8 4
5 3
9 7
17
5 1 4
2 5 7 4 6
5 4
17
In the first example Misha can buy shovels on positions 11 and 44 (both with costs 22 ) during the first purchase and get one of them for free using the first or the third special offer. And then he can buy shovels on positions 33 and 66 (with costs 44 and 33 ) during the second purchase and get the second one for free using the first or the third special offer. Then he can buy the shovel on a position 77 with cost 11 . So the total cost is 4+2+1=74+2+1=7 .
In the second example Misha can buy shovels on positions 11 , 22 , 33 , 44 and 88 (costs are 66 , 88 , 55 , 11 and 22 ) and get three cheapest (with costs 55 , 11 and 22 ) for free. And then he can buy shovels on positions 66 , 77 and 99 (all with costs 11 ) without using any special offers. So the total cost is 6+8+1+1+1=176+8+1+1+1=17 .
In the third example Misha can buy four cheapest shovels without using any special offers and get the total cost 1717 .
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = *1e5+;
int a[maxn];
/*s表示前i件物品中的总花费,
g代表前i件物品中最多能免费的件数
dp代表前i件物品中最大能够节省的钱
*/
int s[maxn],g[maxn],dp[maxn]; int main(){
int n,m,k;
cin>>n>>m>>k;
for( int i=; i<=n; i++ ){
cin>>a[i];
}
sort(a+,a++n);
for( int i=; i<=n; i++ ){
s[i]=s[i-]+a[i];//前缀和
}
for( int i=; i<=m; i++ ){
int x,y;
cin>>x>>y;
g[x]=max(g[x],y);//最大减少数
}
for( int i=; i<=k; i++ ){
for( int j=; j<i; j++ ){
dp[i]=max(dp[i],dp[j]+s[j+g[i-j]]-s[j]);
}
}
cout<<s[k]-dp[k];
return ;
}
CF F. Shovels Shop(前缀和预处理+贪心+dp)的更多相关文章
- Codeforces Round #552 (Div. 3) F. Shovels Shop (前缀和预处理+贪心+dp)
题目:http://codeforces.com/contest/1154/problem/F 题意:给你n个商品,然后还有m个特价活动,你买满x件就把你当前的x件中最便宜的y件价格免费,问你买k件花 ...
- cf F. Shovels Shop
https://codeforces.com/contest/1154/problem/F 给定m个折扣 每个折扣的{x,y}的意思是每次购买如果买到确切的x只铲子就其中的最便宜的y只铲子免付: 先贪 ...
- F. Shovels Shop 背包DP
题意: 商店里有n把铲子 每个铲子有其标价 一个人要买k吧 有m个优惠政策 每个优惠政策有两个元素x,y 表示 正好买x个铲子的时候 这x个铲子中最便宜的y个铲子免单 求用最少的前买到k个铲子 ...
- Codeforces Round #552 (Div. 3) F. Shovels Shop(dp)
题目链接 大意:给你n个物品和m种优惠方式,让你买k种,问最少多少钱. 思路:考虑dpdpdp,dp[x]dp[x]dp[x]表示买xxx种物品的最少花费,然后遍历mmm种优惠方式就行转移就好了. # ...
- CF 628C --- Bear and String Distance --- 简单贪心
CF 628C 题目大意:给定一个长度为n(n < 10^5)的只含小写字母的字符串,以及一个数d,定义字符的dis--dis(ch1, ch2)为两个字符之差, 两个串的dis为各个位置上字符 ...
- BZOJ-1587|前缀和 预处理 dp||叶子合并leaves
叶子合并leaves Description 在一个美丽的秋天,丽丽每天都经过的花园小巷落满了树叶,她决定把树叶堆成K堆,小巷是笔直的 共有N片树叶(树叶排列也是笔直的),每片树叶都有一个重量值,并且 ...
- HDU 5550 - Game Rooms(DP + 前缀和预处理)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5550 题意: 一个大楼有n(2≤n≤4000)层,每层可以建一个乒乓球房或者一个游泳房,且每种房间在大楼 ...
- LightOJ-1007-Mathematically Hard-欧拉函数打表+前缀和+预处理
Mathematically some problems look hard. But with the help of the computer, some problems can be easi ...
- 【BZOJ-3174】拯救小矮人 贪心 + DP
3174: [Tjoi2013]拯救小矮人 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 686 Solved: 357[Submit][Status ...
随机推荐
- Git开发工作流
1.1 master分支 主分支,产品的功能全部实现后,最终在master分支对外发布. 1.2 develop分支 开发分支,基于master分支克隆,产品的编码工作在此分支进行. 1.3 rele ...
- Agiliq署名的免费python书籍
在他们的官网介绍中,说他们团队自2009年开始使用Django,Python,Postgres,Augular等工具来开发webapp,移动应用后台等.并且,他们还有一个Github组织,开源了相当多 ...
- QT删除非空文件夹
int choose; choose = QMessageBox::warning(NULL,"warning","确定删除该文件?",QMessageBox: ...
- Django—跨域请求(jsonp)
同源策略 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源. 示例:两个Django demo demo1 url.py url(r'^demo1/',demo1), vie ...
- 利用Google趋势来预测比特币价格 - 续1
之前发布了一篇文章利用Google趋势来预测比特币价格,说到了看到一篇文章很朴素的介绍了google趋势和比特币价格的一个关系.觉得很简单直白,就根据那个模型写了个程序,部署起来了,从十一月十四号到现 ...
- 大数据学习之hdfs集群安装部署04
1-> 集群的准备工作 1)关闭防火墙(进行远程连接) systemctl stop firewalld systemctl -disable firewalld 2)永久修改设置主机名 vi ...
- 原生js添加博客点击鼠标出小心心效果~~
昨天刚申请成功JS权限,心血来潮想添加点东西,记得之前看到别人家博客首页点击鼠标的时候会出现炫酷的 “小心心”,自己也来搞一个.没有用jquery啥的框架,原生js写起来麻烦了点,不过主要是怕博客首页 ...
- lombok @EqualsAndHashCode 注解讲解
官方文档:@EqualsAndHashCode 原文中提到的大致有以下几点: 1. 此注解会生成equals(Object other) 和 hashCode()方法. 2. 它默认使用非静态,非瞬态 ...
- 迁移hive,不同集群。
step1: 设置默认需要导出的hive数据库为defaultDatabase 在原集群中的任意节点上,新建“.hiverc”文件,加入如下内容: vi ~/.hiverc use defaultDa ...
- arrayList和vector的区别--2019-4-16
1. Vector & ArrayList 1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的 ...