CF1471-C. Strange Birthday Party
CF1471-C. Strange Birthday Party
题意:
你要举办一场生日派对。派对有\(n\)个人,每个人都有一个数字\(k_i\)。超市有\(m\)件礼物,购买每件礼物需要花费\(\$c_j(c_1<c_2<...<c_m)\),且每个礼物只有一件。你要给这\(n\)个人发东西,对于第\(i\)个人,你有两种选择:
1. 给第\(i\)个人发礼物,那么给这个人的礼物要求\(j<=k_i\),即礼物的编号不能超过这个人的数字\(k_i\);
2. 直接给这个人\(\$c_{k_i}\).
现在要你求出最小的花费。
思路:
按花费从小到大依次分配礼物。假设现在要分配的礼物的编号是\(cur\),利用贪心的思想,当\(cur<=k_i\)时,依次将花费最小的礼物分给\(k_i\)最大的人;当\(cur>k_i\)时,直接给这位朋友\(\$c_{k_i}\)。
原因如下:当\(cur<=k_i\)时,有\(c_{cur}<=c_{k_i}\);当\(cur>k_i\)时,有\(c_{k_i}<c_{cur}\),每次都取两者中较小的。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
const int Maxn = 300005;
int a[Maxn], b[Maxn];
void solve() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", a + i);
}
for (int i = 1; i <= m; i++) {
scanf("%d", b + i);
}
std::sort(a + 1, a + n + 1);
ll ans = 0;
int cur = 1;
for (int i = n; i > 0; i--) {
if (a[i] > cur) {
ans += b[cur++];
} else {
ans += b[a[i]];
}
}
printf("%lld\n", ans);
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
CF1471-C. Strange Birthday Party的更多相关文章
- timus 1175. Strange Sequence 解题报告
1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...
- CF719C. Efim and Strange Grade[DP]
C. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...
- HDU 1548 A strange lift (最短路/Dijkstra)
题目链接: 传送门 A strange lift Time Limit: 1000MS Memory Limit: 32768 K Description There is a strange ...
- ACM : HDU 2899 Strange fuction 解题报告 -二分、三分
Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- POJ 2891 Strange Way to Express Integers(拓展欧几里得)
Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...
- A strange lift_BFS
Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...
- HDU 1548 A strange lift (bfs / 最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Time Limit: 2000/1000 MS (Java/Ot ...
- poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9472 ...
- A strange lift
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- strange error encountered today in ROS
I reinstalled my ubuntu system and also ROS. I tested slam_karto package when some strange error cam ...
随机推荐
- Promise.all()使用实例
一.什么是Promise.all()? 在说这个之前要先说清楚promise.promise就是一个对象,专门用来处理异步操作的. 而Promise.all方法用于将多个 Promise 实例,包装成 ...
- Centos7.4 小白式安装(初学)
虚拟机安装Centos7.4系统 适用人群(初学者) 下载Centos7.4镜像 https://pan.baidu.com/s/1NtjfdHV3OWAvfDj5vrR7HQ 提取码:hzzw 虚 ...
- MYSQL(将数据加载到表中)
1. 创建和选择数据库 mysql> CREATE DATABASE menagerie; mysql> USE menagerie Database changed 2. 创建表 mys ...
- 代码托管从业者 Git 指南
本文作者:李博文 - CODING 后端开发工程师 前言 六七年前,我机缘巧合进入了代码托管行业,做过基于 Git 支持 SVN 客户端接入.Git 代码托管平台分布式.Git 代码托管读写分离.Gi ...
- 【python刷题】LRU
什么是LRU? LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次 ...
- CSGO项目
#include <Windows.h> #include <sstream> #include <iostream> #include <math.h> ...
- CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作
出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) CobalStrike 4.0 生成后门几种方式 步骤:Attacks-〉P ...
- java native:Java本地方法调用(jni方式)
https://www.cnblogs.com/zh1164/p/6283831.html
- Flutter环境搭建遇坑小结(一)
对flutter的了解与开发也有一段时间了,总的来说,搭建开发环境遇到的各种坑也是很多,尤其对于初次接触Android开发的人员来说 一.flutter运行提示Running Gradle task ...
- 记一次,Docker镜像1G多精简至300+M的过程
记一次,Docker镜像1G多精简至300+M的过程 一.业务场景描述 二.Docker时区不一致,相差8小时 三.通过Docker发布的服务上传文件上传不上去 四.上传的图片带水印,水印中包含的字体 ...