Test 6.24 T1 购物
问题描述
小 C 今天出去购物,商店里总共有 n 种商品,小 C 的钱够买至多 k 个商品。
小 C 对每种商品都有一个喜爱程度,但如果买了同一种商品很多次,小 C 对这种商品的喜爱程度就会降低。
具体地说,如果小 C 买了 x 个第 i 种商品,每个第 i 种商品都会让他增加 max(ai−xbi,0)的喜悦值。请你求出小 C 最多能增加多少喜悦值。
输入格式
第一行两个正整数 n, k。
接下来 n 行,每行两个正整数 ai , bi。
输出格式
输出一个整数,表示答案。
样例输入
2 4
50 2
40 1
样例输出
171
数据范围
对于 50%的数据,n,k ≤1000 。
对于 100%的数据,n, k, ai ≤10 5 ,bi ≤1000。
解析
设第\(k\)次购买第\(i\)件商品,那么新购得的商品增加的开心值为\(a[i]-k*b[i]\),而前面的商品本来可以增加\((k-1)*[a[i]-(k-1)*b[i]]\)的开心值,由于又买了一次,一共减少了\((k-1)*b[i]\)的值,所以,这件商品的贡献为\(a[i]-(2k-1)*b[i]\)。由贪心的思想,用堆维护每次的最大值,每弹出一个值就将对应的商品的新的贡献放进堆中。
代码
#include <iostream>
#include <cstdio>
#include <queue>
#define N 100002
#define int long long
using namespace std;
struct con{
int a,b,id,cost;
bool operator < (const con &x) const{
return cost<x.cost;
}
}c[N];
int n,k,i,cnt[N];
priority_queue<con> q;
int read()
{
char c=getchar();
int w=0;
while(c<'0'||c>'9') c=getchar();
while(c<='9'&&c>='0'){
w=w*10+c-'0';
c=getchar();
}
return w;
}
signed main()
{
freopen("buy.in","r",stdin);
freopen("buy.out","w",stdout);
n=read();k=read();
for(i=1;i<=n;i++){
c[i].a=read();c[i].b=read();
c[i].id=i;cnt[i]++;
c[i].cost=c[i].a-c[i].b;
q.push(c[i]);
}
int ans=0;
for(i=1;i<=k;i++){
con tmp=q.top();
q.pop();
ans+=tmp.cost;
cnt[tmp.id]++;
tmp.cost=tmp.a-(2*cnt[tmp.id]-1)*tmp.b;
if(tmp.cost<0) tmp.cost=0;
q.push(tmp);
}
cout<<ans<<endl;
fclose(stdin);
fclose(stdout);
return 0;
}
P.S. 注意long long......
Test 6.24 T1 购物的更多相关文章
- [2018湖南省队集训] 6.24 T1 marshland
题面在这里! 一开始感觉像一个类似二分图的最小割,于是成功跑偏2333333 很容易发现一个关键性质,'L'的两个角落在的偶数格 的行(或者列)的奇偶性一定不同.... 于是我们再把偶数格按照行(或者 ...
- mysql统计前24小时数据没有补0
SELECT t1. HOUR HOUR, COUNT(t2. HOUR) count FROM ( SELECT DATE_FORMAT( HOUR), '%y-%m-%d %H' ) HOUR F ...
- java多线程系类:基础篇:04synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- SYN Cookie的原理和实现
本文主要内容:SYN Cookie的原理,以及它的内核实现. 内核版本:3.6 SYN Flood 下面这段介绍引用自[1]. SYN Flood是一种非常危险而常见的Dos攻击方式.到目 ...
- 史上最全APP推广渠道
群主做App推广的过程中,有过失败也尝过成功的甜头,渐渐地在APP推广尤其是渠道推广中积累了一些实战经验想同大家分享.如果各位有更好的推广建议,欢迎沟通分享哦! 一.应用商店推广 1.应用市场 ...
- [总结] NOIP 前的考试记录
sb博主又犯sb错误了! 他觉得以往模拟赛因为犯sb错误扔的分足足有1k分了! 于是他想记录一下自己犯的sb错误看看自己到底有多sb! 嗯就从今天开始吧 2018.9.28 1. 二分边界写错.骚什么 ...
- 开源虚拟化KVM(二)管理虚拟存储
五,管理虚拟存储 5.1 虚拟磁盘概述 5.1.1 虚拟化项目中存储的注意事项 [x] 存储的性能几乎总是虚拟化的瓶颈 [x] 通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案 [x] 考虑部署集中 ...
- MT【180】齐次化+换元
已知实数$a,b$满足$a^2-ab-2b^2=1,$则$a^2+b^2$的取值范围_____ 解答:$\textbf{方法一}$由已知得$(a-2b)(a+b)=1$,设$x=a-2b,y=a+b$ ...
- java多线程_01_线程的基本概念
线程:一个程序里边不同的执行路径 例子程序:这个例子程序是一条执行路径.这个程序只有一个分支,就是main方法,叫主线程 public static void main(String[] args) ...
随机推荐
- cenos 7 中firewalld开放服务端口
转载 CentOS 7 为firewalld添加开放端口及相关资料 1.运行.停止.禁用firewalld 启动:# systemctl start firewalld 查看状态:# syste ...
- 职位-CTO:CTO
ylbtech-职位-CTO:CTO 首席技术官是技术资源的行政管理者,英文为Chief Technical Officer或Chief Technology Officer,简称CTO.其职责是制订 ...
- 004-unity3d MonoBehaviour脚本方法简介
一.MonoBehaviour 1.公共方法 CancelInvoke Cancels all Invoke calls on this MonoBehaviour. Invoke Invokes t ...
- 只有一个form 的程序, onactivate 只触发一次。
https://blog.csdn.net/saint13/article/details/454615 Form的onActivate事件 2005年08月15日 01:08:00 阅读数:3406 ...
- 类TreeMap
TreeMap类 import java.util.Set; import java.util.TreeMap; public class IntegerDemo { public static vo ...
- struts2 基础4 验证器、 国际化
验证器: 验证器:用户输入验证 1.手动编程方式 )对于动作类中所有方法进行验证 a.动作类继承ActionSuport b.覆盖调用public void validate(){} 方法 c.在va ...
- 浅谈vue父子组件之间的传值
前言:本章主要说下父子组件的传值,为商品列表组件之间的传值做一个基础预热.Github:https://github.com/Ewall1106/mall(请选择分支chapter23) 1.父组件向 ...
- js之状态模式
level01:电灯程序 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- tbox新增stackless协程支持
tbox之前提供的stackfull协程库,虽然切换效率已经非常高了,但是由于每个协程都需要维护一个独立的堆栈, 内存空间利用率不是很高,在并发量非常大的时候,内存使用量会相当大. 之前考虑过采用st ...
- Symmetric Tree(对称二叉树)
来源:https://leetcode.com/problems/symmetric-tree Given a binary tree, check whether it is a mirror of ...