题目链接:传送门

题目大意:

  DG在书店买书,从左到右第i本书价格为ai。DG从左走到右,能买就买。如果已知DG买了m本书,问他原本最多有多少钱。若无上限,输出“Richman”,若不可能买这么多书,输出“Impossible”。

  (偷偷diss队友想了个假二分)

  1 ≤ n ≤ 105,0 ≤ m ≤ n,0 ≤ ai ≤ 109

思路:

  ①:所有的价格为0的书DG必买,m -= cnt0。(这时若 m < 0,那就Impossible了)

  ②:DG从左走到右买书时,他在持有金额最多的情况下买的书只能是前面的m本书。

    反证:假设DG已经买掉了钱m-1本书,接着如果他买不起第m本书,而买了第m+1本书,那么am > am+1,而在DG买得起第m本书的时候他会更有钱,这与持有金额最多的条件矛盾。

  综上:DG最多的金额是前m本非0的书的总价格+剩下的非0的书中的价格最小值-1。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
int n,m;
ll a[maxn];
int judge(ll k)
{
int res=;
for(int i=;i<=n;i++) {
if(k>=a[i]) res++, k-=a[i];
}
return res;
}
int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%d%d",&n,&m); int cnt0=;
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
if(a[i]==) cnt0++;
}
if(n<=m)
{
printf("Richman\n");
continue;
}
if(cnt0>m)
{
printf("Impossible\n");
continue;
} m -= cnt0;
ll ans=;
int i;
for (i = ; i <= n; i++) {
if (m == )
break;
if (a[i] == )
continue;
ans += a[i];
m--;
}
ll mn=0x3f3f3f3f;
for(;i<=n;i++) if(a[i]!=) mn=min(mn,a[i]);
printf("%lld\n",ans+mn-);
}
}
/*
444
4 2
1 2 4 8
4 0
100 99 98 97
2 2
10000 10000
5 3
0 0 0 0 1
4 1
4 1 3 2
4 2
100 99 0 0
*/

  

ZOJ4067 Books(贪心)的更多相关文章

  1. HDU 5500 Reorder the Books 贪心

    Reorder the Books Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  2. UVa 714 Copying books 贪心+二分 最大值最小化

    题目大意: 要抄N本书,编号为1,2,3...N, 每本书有1<=x<=10000000页, 把这些书分配给K个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的.每个抄写员的速度是相 ...

  3. ZOJ 4067 - Books - [贪心][2018 ACM-ICPC Asia Qingdao Regional Problem J]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4067 题意: 给出 $n$ 本书(编号 $1 \sim n$), ...

  4. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  5. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  6. Codeforces 500C New Year Book Reading

    C. New Year Book Reading time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  7. 【ZOJ4067】Books(贪心)

    题意:DG在书店买书,从左到右第i本书价格为ai. DG从左走到右,能买就买.如果已知DG买了m本书,问他原本最多有多少钱. 若无上限,输出“Richman”,若不可能买这么多书,输出“Impossi ...

  8. UVA 714 Copying Books 最大值最小化问题 (贪心 + 二分)

      Copying Books  Before the invention of book-printing, it was very hard to make a copy of a book. A ...

  9. uva 714 - Copying Books(贪心 最大值最小化 二分)

    题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...

随机推荐

  1. python 数字格式化

    第二种办法比较常用:   %02d print '%02d' % 11

  2. 把旧系统迁移到.Net Core 2.0 日记 (17) --多租户和SoftDelete

    在EF Core 2.0版本中出现了全局过滤新特性即HasQueryFilter,它出现的意义在哪里?能够解决什么问题呢? 通过HasQueryFilter方法来创建过滤器能够允许我们对访问特定数据库 ...

  3. Linux下使用date命令查看和修改时间

    1.查看系统时区和时间,执行命令date -R “-0500”代表西五区(America/New_York),北京的时区为“+0800”(东八区). 2.查看硬件时间,执行命令hwclock --sh ...

  4. Win系列:VC++编写自定义组件

    在Visual Studio 中新建一个Visual C++的 Windows应用商店的Windows运行时组件项目,并将项目命名为FilePickerComponent.然后在项目的解决方案资源管理 ...

  5. am335x system upgrade uboot nand boot(三)

    在uboot 下初始化nand,一般需要做如下工作: 第一: 配置默认从NAND boot Index: include/configs/am335x_evm.h=================== ...

  6. OO Summary Ⅳ

    测试与正确性论证的效果差异 测试,或者说用断言进行黑箱测试,用大量的数据进行“覆盖性测试”,目的是当分支覆盖率达到100%也就是理论上来说所有可能的输入都已经测试过了,而输出结果均是正确的,那么我们理 ...

  7. 【原创】连接数据库MySQL,读取、显示、修改数据

    /* Time: 2017.01.02 —— 2017.01.04 * Author: WJ * Function:连接数据库,从数据库中读取图片并显示(已成功) */ [参考链接] MySQL存入图 ...

  8. Oracle 12c Sharding测试过程中的问题解决

    Sharding测试过程中的问题解决 1. 环境部署 软件的版本需要12.2.0.0.3及以上的版本 在配置GSM的时候报错信息不会很直观的展示出来,这对于安装部署有很大阻碍. 2. 数据导入 Dup ...

  9. day23 模块02

    核能来袭--模块 2 1.nametuple() 2.os模块 3.sys模块(重点) 4.序列化 (四个函数) 5.pickle(重点) 6.json(重点中的重点) 1.nametuple() 命 ...

  10. loadrunner json参数化

    因为json格式有{},所以LR参数化时如果也用默认的{}的话,会冲突,这样脚本运行时就无法识别,导致不能正确的读取参数化文件里的内容,此时把参数化的{}改成其他符号即可,比如<>