https://codeforces.com/contest/1154/problem/F

给定m个折扣

每个折扣的{x,y}的意思是每次购买如果买到确切的x只铲子就其中的最便宜的y只铲子免付;

先贪心一波,因为要买k只,而不管折扣怎么变,怎么买,我们都要买原价最便宜的k只铲子,这贪心是对的

接着就选择折扣offers ,明显要dp解决,贪心贪不出(复杂度太高);

设dp【i】表示买i只铲子的最小花费;

所以转移方程:dp【i】=min(f【i】,(选择折扣的处理));

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=1e15;
const int M=2e5+;
ll a[M],b[M],dp[M],sum[M];
inline int read(){
ll sum=;
int x=;
char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')
x=;
ch=getchar();
}
while(ch>=''&&ch<='')
sum=(sum<<)+(sum<<)+(ch^),ch=getchar();
return x?sum:-sum;
}
int main(){
ios::sync_with_stdio(false);
ll n,m,k;
n=read();
m=read();
k=read();
for(int i=;i<=n;i++)
a[i]=read();
for(int i=;i<=m;i++){
ll x,y;
x=read();
y=read();
if(x<=k)
b[x]=max(b[x],y);
}
sort(a+,a++n);
for(int i=;i<=k;i++)
sum[i]=sum[i-]+a[i];
for(int i=;i<=k;i++)
dp[i]=inf;
dp[]=;
for(int i=;i<=k;i++)
for(int j=;j<i;j++)
dp[i]=min(dp[i],dp[j]+sum[i]-sum[j+b[i-j]]);
cout<<dp[k];
return ;
}

cf F. Shovels Shop的更多相关文章

  1. CF F. Shovels Shop(前缀和预处理+贪心+dp)

    F. Shovels Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. Codeforces Round #552 (Div. 3) F. Shovels Shop (前缀和预处理+贪心+dp)

    题目:http://codeforces.com/contest/1154/problem/F 题意:给你n个商品,然后还有m个特价活动,你买满x件就把你当前的x件中最便宜的y件价格免费,问你买k件花 ...

  3. F. Shovels Shop 背包DP

    题意: 商店里有n把铲子 每个铲子有其标价 一个人要买k吧 有m个优惠政策 每个优惠政策有两个元素x,y 表示   正好买x个铲子的时候  这x个铲子中最便宜的y个铲子免单 求用最少的前买到k个铲子 ...

  4. Codeforces Round #552 (Div. 3) F. Shovels Shop(dp)

    题目链接 大意:给你n个物品和m种优惠方式,让你买k种,问最少多少钱. 思路:考虑dpdpdp,dp[x]dp[x]dp[x]表示买xxx种物品的最少花费,然后遍历mmm种优惠方式就行转移就好了. # ...

  5. codeforces#1154F. Shovels Shop (dp)

    题目链接: http://codeforces.com/contest/1154/problem/F 题意: 有$n$个物品,$m$条优惠 每个优惠的格式是,买$x_i$个物品,最便宜的$y_i$个物 ...

  6. 「CF1154F」Shovels Shop【背包DP】

    题目链接 [洛谷传送门] 题解 非常简单的背包. \(f[i]\)表示购买\(i\)个物品所需要最少的花费. 不考虑免费的限制条件,那么一定是选择前\(k\)个双鞋子. 那么加入免费的条件,那么还是要 ...

  7. Codeforces 1154F - Shovels Shop - [DP]

    题目链接:https://codeforces.com/contest/1154/problem/F 题解: 首先,可以确定的是: 1.$(x,y)$ 里 $x>k$ 的都不可能用: 2.肯定买 ...

  8. Codeforces 1154F Shovels Shop

    题目链接:http://codeforces.com/problemset/problem/1154/F 题目大意: 商店有n把铲子,欲购k把,现有m种优惠,每种优惠可使用多次,每种优惠(x, y)表 ...

  9. CF F. MST Unification (最小生成树避圈法)

    题意 给一个无向加权联通图,没有重边和环.在这个图中可能存在多个最小生成树(MST),你可以进行以下操作:选择某条边使其权值加一,使得MST权值不变且唯一.求最少的操作次数. 分系:首先我们先要知道为 ...

随机推荐

  1. LIS是什么?

    在之前的随笔中,大概介绍了医疗系统有哪些,是干什么的,是怎么配合医院业务的.现在就开始主要的说一说我的主要工作业务 — LIS了. 前面说到过LIS(LIMS),名称是实验室信息管理系统,大概可以分解 ...

  2. css3 实现渐变边框

    (1)一个渐变的底边线border:1px solid transparent;border-image: -webkit-linear-gradient(right, #FF9848,#FF2A2B ...

  3. JavaScript把两个数组对象合并成一个一一对应的数组对象

    合并数组或者对象在数组或对象前面加...,是es6的新写法,然后数组的map方法会返回数组. var obj1 = [{ , "model": "XQG70-S1208F ...

  4. 布局基础<kotlin>2,自定义控件(整理自网络)

    引导页 传送门 Android vector标签 PathData 画图 ViewPager 代码清单 activity_main.xml <?xml version="1.0&quo ...

  5. WordPress站点绑定多个域名

    refer to https://blog.csdn.net/wzl505/article/details/54970321 打开根目录下的 wp-config.php 文件,找到 require_o ...

  6. HashMap核心功能源码浅析

    1.引子 "HashMap"由“hash”和“map"两个单词组成,这里的”map"表示“映射”而不是“地图”的意思,两个单词连起来就是“哈希映射表”.Map是 ...

  7. k8s 使用新增user配置kubectl在各个节点都可运行

    k8s增加普通用户User 普通用户并不是通过k8s来创建和维护,是通过创建证书和切换上下文环境的方式来创建和切换用户.其实创建用户的步骤,就是手动部署k8s集群里的一个步骤.创建过程见下: 1.创建 ...

  8. [前端] VUE基础 (8) (vue-cli脚手架)

    一.安装vue-cli脚手架 官方文档:https://cli.vuejs.org/zh/guide/cli-service.html Vue CLI 的包名称由 vue-cli改成了  @vue/c ...

  9. C# 串口编程,扫码枪使用

    一.串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为 ...

  10. JFrame的面板结构和JPanel的使用

    JFrame图解结构 有一窗口框架实例:JFrame win = new JFrame("窗口");在new JFrame()时,构建了JFrame实例对象,在实例中的Layere ...