Codeforces Round #552 (Div. 3) F. Shovels Shop (前缀和预处理+贪心+dp)
题目:http://codeforces.com/contest/1154/problem/F
题意:给你n个商品,然后还有m个特价活动,你买满x件就把你当前的x件中最便宜的y件价格免费,问你买k件花最少的钱是多少
思路:首先这个特价活动就像点外卖一样满多少减多少,你可以分几次来使用同一个优惠或者不同的优惠,然后我们我们分析三个点
1,那个特价活动中x>k的我们肯定都不会使用,因为那个时候已经买满了k件
2,我们肯定是买最便宜的k件来使用特价活动
3,我们其实可以当成分开几组来使用优惠,就像外卖有些时候要分几次来点才划得来一样
那么我们的思路就有了,我们dp[i]代表的是前i个物品的最高优惠价格,我们枚举最后一次使用特价活动是在哪个时候
为了方便我们用几个数组分别记录一些东西
s[i] 代表前i个的总花费
g[i] 代表买满i个最多能减少多少个物品值 (因为活动可能有重复,买i个减x个和y个,这个时候要取最优的情况)
dp[i] 代表的是前i个物品的最高优惠价格
我们枚举最后一次使用活动要枚举边界在哪,所以我们要使用二重循环枚举
这样转化一下,其实和我之前写的一篇数组分组是一样的思路了,主要还是要学会转化,建模
#include<bits/stdc++.h>
#define mod 1000007
#define maxn 200001
using namespace std;
typedef long long ll;
ll n,m,k;
ll dp[maxn];
ll s[maxn];
ll g[maxn];
ll a[maxn];
int main(){
cin>>n>>m>>k;
for(int i=;i<=n;i++) cin>>a[i];
sort(a+,a+n+);
for(int i=;i<=k;i++){
s[i]=s[i-]+a[i];//记录前缀和
}
for(int i=;i<=m;i++){
ll x,y;
cin>>x>>y;
if(x>k) continue;
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];
}
Codeforces Round #552 (Div. 3) F. Shovels Shop (前缀和预处理+贪心+dp)的更多相关文章
- Codeforces Round #552 (Div. 3) F. Shovels Shop(dp)
题目链接 大意:给你n个物品和m种优惠方式,让你买k种,问最少多少钱. 思路:考虑dpdpdp,dp[x]dp[x]dp[x]表示买xxx种物品的最少花费,然后遍历mmm种优惠方式就行转移就好了. # ...
- Codeforces Round #552 (Div. 3) F题
题目网址:http://codeforces.com/contest/1154/problem/F 题目大意:给出n,m,k,n是物体的个数,m是优惠方式的种数,k是需要购买的物体个数, 然后给出n个 ...
- Codeforces Round #376 (Div. 2) F. Video Cards —— 前缀和 & 后缀和
题目链接:http://codeforces.com/contest/731/problem/F F. Video Cards time limit per test 1 second memory ...
- Codeforces Round #552 (Div. 3) 题解
Codeforces Round #552 (Div. 3) 题目链接 A. Restoring Three Numbers 给出 \(a+b\),\(b+c\),\(a+c\) 以及 \(a+b+c ...
- Codeforces Round #485 (Div. 2) F. AND Graph
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
- Codeforces Round #552 (Div. 3) A题
题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
- Codeforces Round #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
随机推荐
- 使用sphinx制作接口文档并托管到readthedocs
此sphinx可不是彼sphinx,此篇是指生成文档的工具,是python下最流行的文档生成工具,python官方文档即是它生成,官方网站是http://www.sphinx-doc.org,这里是一 ...
- rematch:当你受不了redux繁琐写法的时候,是时候了解一波rematch了
前言: 前段时间学习完react后,刚好就接到公司一个react项目的迭代,顺便巩固一下前段时间的学习成果.项目使用的是redux+react-router,将所有的数据都放在redux中,异步处理数 ...
- ps使用经验
- 20175317 《Java程序设计》第六周学习总结
20175317 <Java程序设计>第六周学习总结 教材学习内容总结 第六周我学习了教材第七章与第十章的内容,了解了内部类.异常类与输入输出流的知识,学到了以下内容: 什么是内部类 如何 ...
- NetSec2019 20165327 Exp0 Kali安装 Week1
NetSec2019 20165327 Exp0 Kali安装 Week1 一.下载并安装Kali和VMware kali在官网下载,VMware上学期已安装 安装如下步骤: 选典型: 选稍后安装操作 ...
- selenium自动化定位方式
自动化定位方式 1.String Xpath = String.format("//*[@id=\"saveFileKeyWordsBtnHand\"]/../../.. ...
- 在java程序代码中打开文件
class TEST { public static void main(String[] args){ System.out.println("He ...
- jQuery的版本兼容问题
之前在做头像上传的时候,使用的jQuery是1.8.2的版本,然后头像上传做完后,发现项目用的jQuery版本是3.3.1的.由于两个版本的差距太大了.所以兼容很差. 3.3.1不支持剪切头像的某些函 ...
- 【IDEA填坑】xml不编译
今天在maven编译Springboot项目的时候,发现src/main/resources下的配置文件编译失败(就是war包中没有放入xml配置文件导致程序启动失败),经查询资料,发现新版本的IDE ...
- ES6/ES7/ES8常用特性和新特性
转自:https://www.jianshu.com/p/9da4aa1c9970