zoukankan      html  css  js  c++  java
  • cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构

    郭大侠与Rabi-Ribi

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

    最近郭大侠迷上了玩Rabi-Ribi这个游戏。

    Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~

    这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家。

    当然咯,郭大侠想带回的兔子的总价值最高~

    但是,兔子实在是太多了,郭大侠的锤子每一秒钟只能敲晕一只兔子,而且每一只兔子只会在地面上逗留a[i]a[i]秒,在a[i]a[i]秒之后,这一只兔子就会跑回自己的小窝里面。

    所以郭大侠面临一些抉择,希望你能帮助他。

    Input

    第一行包含一个整数NN表示有NN个兔子在地上跑来跑去。

    第二行NN个用空格分隔的整数a[i]a[i]表示第i只兔子冒出后停留的时间

    第三行NN个用空格分隔的整数v[i]v[i]表示第i只兔子的价值。

    1N1000001≤N≤100000

    1a[i]50001≤a[i]≤5000

    1v[i]10001≤v[i]≤1000

    Output

    输出郭大侠最多能获得的价值是多少

    Sample input and output

    Sample InputSample Output
    5
    5 3 6 1 4
    7 9 2 1 5
    24
    3
    1 1 1
    1 2 3
    3

    Hint

    死宅真可怕,连可爱的兔子都要敲晕带回家 QAQ

    代码

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<vector>
     5 #include<queue>
     6 #include<algorithm>
     7 using namespace std;
     8 
     9 struct node{
    10     int t,w;
    11 }e[100005];
    12 
    13 struct cmp1{
    14     bool operator ()(node a,node b){
    15         return a.w<b.w;//最大值优先 
    16     }
    17 };
    18 
    19 bool cmp2(node a,node b){
    20     return a.t>b.t;//最大值优先 
    21 }
    22 
    23 priority_queue<node,vector<node>,cmp1> q;
    24 int n,ans,point;
    25 
    26 int main(){
    27 //    freopen("01.in","r",stdin);
    28     scanf("%d",&n);
    29     for(int i=1;i<=n;i++) scanf("%d",&e[i].t);
    30     for(int i=1;i<=n;i++) scanf("%d",&e[i].w);
    31     sort(e+1,e+n+1,cmp2);
    32     
    33     
    34     int i=5000;point=1;
    35     while(i>0){
    36         while(e[point].t>=i){
    37             q.push(e[point++]);
    38         }
    39         if(!q.empty()) ans+=q.top().w,q.pop();
    40         i--;
    41     }
    42     
    43     printf("%d
    ",ans);
    44     return 0;
    45 }

    就是靠优先队列,倒着来有最优结果,在某个时刻不着急砸兔子

    先把兔子加到队列里面来,相当于获取砸这一只的机会

    当要砸的时候,获取队列里最贵的一只就好

    貌似有一道经典题目一样,大意就是开车绕个圈加油,问最少加几次油,也可以看成类似经过加油站获取加油的机会,、油不够的时候,获取最大值

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 相关阅读:
    百度小程序优化总结
    Java程序线上故障排查
    常用文本处理命令
    命令行笔记
    Java对象深拷贝浅拷贝总结
    SSH命令总结
    linux学习问题总结
    linux进程管理总结
    Java网络编程中异步编程的理解
    JVM内存管理的一些思考
  • 原文地址:https://www.cnblogs.com/radiumlrb/p/5906047.html
Copyright © 2011-2022 走看看