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的更多相关文章

  1. timus 1175. Strange Sequence 解题报告

    1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...

  2. 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 ...

  3. HDU 1548 A strange lift (最短路/Dijkstra)

    题目链接: 传送门 A strange lift Time Limit: 1000MS     Memory Limit: 32768 K Description There is a strange ...

  4. ACM : HDU 2899 Strange fuction 解题报告 -二分、三分

    Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  5. POJ 2891 Strange Way to Express Integers(拓展欧几里得)

    Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...

  6. A strange lift_BFS

    Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...

  7. 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 ...

  8. poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9472   ...

  9. A strange lift

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  10. strange error encountered today in ROS

    I reinstalled my ubuntu system and also ROS. I tested slam_karto package when some strange error cam ...

随机推荐

  1. 【Oracle】delete表后commit后怎么找回,方法

    有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦 下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据 模拟实验环境: 创建一个新表 SQL> c ...

  2. MyBatis初级实战之五:一对一关联查询

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. ETCD数据迁移

    ETCD数据迁移 本文阅读对象为想要将Rainbond平台rbd-etcd切换至外部etcd的相关人员. 在k8s master节点创建secret 本文中将要切换的ETCD为根据Rainbond官方 ...

  4. 说说C# 8.0 新增功能Index和Range的^0是什么?

    前言 在<C# 8.0 中使用 Index 和 Range>这篇中有人提出^0是什么意思?处于好奇就去试了,结果抛出异常.查看官方文档说^0索引与 sequence[sequence.Le ...

  5. click的简单使用

    click的简单使用 先通过一个简单的例子来认知一下click把 import click @click.command() @click.option('-p', '--port', default ...

  6. MariaDB(selec的使用)

      --查询基本使用 -- 查询所有列 --select * from 表名 select * from students;   --一定条件查询 select * from students whe ...

  7. Windows server 2008常用优化设置

    1. 如何取消开机按 CTRL+ALT+DEL登录? 控制面板→管理工具→本地安全策略→本地策略→安全选项→交互式登录:无须按CTRL+ALT+DEL→启用. 2. 如何取消关机时出现的关机理由选择项 ...

  8. ORM框架对比以及Mybatis配置文件详解

    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

  9. Spark SQL如何选择join策略

    前言 众所周知,Catalyst Optimizer是Spark SQL的核心,它主要负责将SQL语句转换成最终的物理执行计划,在一定程度上决定了SQL执行的性能. Catalyst在由Optimiz ...

  10. 房产基于Swoole的PHP RPC框架设计

    房产基于Swoole的PHP RPC框架设计 https://mp.weixin.qq.com/s/XSrKEQ-0q4DvjOGTIwYYzg