Description

一条线上有栋楼,第栋楼有层,每层有1个价值为的物品.

可以花费1个单位时间完成以下3种移动:

1.在同一栋楼中向上或者向下走一层;

2.如果此刻在顶楼,可以通往1楼;

3.从当前楼移动到相邻楼的同层.如果相邻楼没有当前位置高,则会落到相邻楼的顶层。

初始时在第一栋楼的顶层,单位时间可以移动,拿去物品不需要时间,且一个物品被拿一次之后就会消失。
求能获得的最大的总价值.

Input

第一行两个正整数.
以下行每行两个整数表示

Output

输出一行一个整数表示最大的总价值。

Sample Input

3 3 2 1 1 5 3 4

Sample Output

14

HINT


Solution

枚举最远到达的那栋楼,然后贪心.

  1. #include<cmath>
  2. #include<ctime>
  3. #include<queue>
  4. #include<stack>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cstring>
  8. #include<cstdlib>
  9. #include<iostream>
  10. #include<algorithm>
  11. #define N 1000005
  12. using namespace std;
  13. typedef long long ll;
  14. struct house{
  15. ll h,v,n;
  16. }a[N];
  17. int n,u;
  18. ll cnt[N],v[N],m,k,ans,sum,tmp;
  19. inline int read(){
  20. int ret=0;char c=getchar();
  21. while(!isdigit(c))
  22. c=getchar();
  23. while(isdigit(c)){
  24. ret=(ret<<1)+(ret<<3)+c-'0';
  25. c=getchar();
  26. }
  27. return ret;
  28. }
  29. inline ll rd(){
  30. ll ret=0LL;char c=getchar();
  31. while(!isdigit(c))
  32. c=getchar();
  33. while(isdigit(c)){
  34. ret=(ret<<1LL)+(ret<<3LL)+(ll)(c-'0');
  35. c=getchar();
  36. }
  37. return ret;
  38. }
  39. inline bool cmp(house x,house y){
  40. if(x.v!=y.v) return x.v>y.v;
  41. return x.n<y.n;
  42. }
  43. inline void init(){
  44. n=read();m=rd()+1LL;
  45. if((ll)(n)>m) n=(int)(m);
  46. for(int i=1;i<=n;++i){
  47. a[i].h=rd();v[i]=a[i].v=rd();a[i].n=(ll)(i);
  48. }
  49. sort(a+1,a+1+n,cmp);
  50. for(int i=1;i<=n;++i){
  51. ++cnt[a[i].n];--m;
  52. }
  53. for(int i=1;i<=n&&m;++i){
  54. tmp=min(a[i].h-1LL,m);
  55. cnt[a[i].n]+=tmp;m-=tmp;
  56. }
  57. for(int i=1;i<=n;++i)
  58. ans+=cnt[i]*v[i];
  59. for(u=1;u<=n;++u)
  60. if(cnt[a[u].n]!=a[u].h) break;
  61. sum=ans;
  62. for(int k=n;k>1;--k){
  63. m=cnt[k];sum-=cnt[k]*v[k];
  64. for(;u<=n;++u)
  65. if(a[u].n<k){
  66. tmp=min(a[u].h-cnt[a[u].n],m);
  67. cnt[a[u].n]+=tmp;m-=tmp;
  68. sum+=a[u].v*tmp;
  69. if(!m) break;
  70. }
  71. ans=max(ans,sum);
  72. }
  73. printf("%lld\n",ans);
  74. }
  75. int main(){
  76. freopen("training.in","r",stdin);
  77. freopen("training.out","w",stdout);
  78. init();
  79. fclose(stdin);
  80. fclose(stdout);
  81. return 0;
  82. }

[日常训练]training的更多相关文章

  1. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  2. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  3. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  4. 「日常训练」 Mike and Fun (CFR305D2B)

    题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...

  5. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

  6. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  7. [日常训练]string

    Description 给定一个长度为$n$的字符串,串中的字符保证是前$k$个小写字母.你可以在字符串后再添加$m$个字符,使得新字符串所包含的不同的子序列数量尽量多.当然,前提是只能添加前$k$个 ...

  8. [日常训练]yayamao的神题

    Description $yayamao$是数学神犇,一天他在纸上计算起了$1/P$, 我们知道按照模拟除法可以得到准确解,例如$1/7=0.(142857),1/10=0.1(0)$.$yayama ...

  9. [日常训练]mod

    Description 给定$p_1,p_2,-,p_n,b_1,b_2,...,b_m$, 求满足$x\;mod\;p_1\;\equiv\;a_1,x\;mod\;p_2\;\equiv\;a_2 ...

随机推荐

  1. SpringMVC的Controller中使用线程安全的初始化

    因为SpringMVC的Controller默认是单例, 在这种情况下, Controller中使用的私有变量必须也是单例, 例如各种service, 否则会有多线程访问数据互相修改的问题. 对于需要 ...

  2. Ros与Vrep平台搭建

    参考资料: ROS安装: ros 是一个framework 和Android有点像,内核用的linux.Ros提供了一种供机器人开发者迅速上手的一个平台, 可以快速搭建自己的应用,利用ros下面自带的 ...

  3. 帆软FineReport如何使用程序数据集

    大多数情况下,FineReport直接在设计器里使用“数据集查询”,直接写SQL就能满足报表要求,但对于一些复杂的报表,有时候SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表 ...

  4. 向jboss写入服务器日志

    实际开发中,记录日志是常用的功能,jboss默认情况下已经记录了很多运行日志,如果开发人员要手动在server.log中写入日志,可以参考下面的方法: package utils; import ja ...

  5. 跟我学习Storm_Storm基本架构

    Storm集群类似于一个Hadoop集群. 然而你在Hadoop的运行“MapReduce job”,在Storm上你运行 “topologies”. “job”和“topologies”本身有很大的 ...

  6. .net 动态代理的泛型方法支持问题

    最近一直在做.net平台下的高速服务框架.其中有一个问题一直困扰着我:通过动态代理RealProxy创建的服务代理,不支持泛型方法调用.比如: 接口声明: public interface IMete ...

  7. Theano2.1.10-基础知识之循环

    来自:http://deeplearning.net/software/theano/tutorial/loop.html loop 一.Scan 一个递归的通常的形式,可以用来作为循环语句. 约间和 ...

  8. Windjs应用

    一个异步的js类库,应用价值不大,所以代码也没在维护了.在做h5特效或者游戏动画方面有点用处. $await是Windjs的核心api.具体可以check 浅谈Jscex的$await语义及异步任务模 ...

  9. jsp实现一条横线中间有字的样式

    实现样式: ---------------------------------------------------- xxxxxx ---------------------------------- ...

  10. jquery的getjson与jsonp

    仔细的学习jquery的getjson的用法. http://www.cnblogs.com/leejersey/p/3750232.html http://www.jb51.net/article/ ...