zoukankan      html  css  js  c++  java
  • HDU4864:Task(贪心)

    题意:

    给出n个机器和m个任务,对于一天来说,每个机器有最大工作时间xi,可接受最大等级yi,每个任务有一个工作时间xi,一个等级yi,可获价值为500*xi+2*yi,任务需要在一台机器一天内完成,问我们一天可得到的最大价值。

    思路:

    由于xi的系数500远大于yi的系数,故只要使xi最大,总价值一定最大。

    所以我们从任务开始贪心而不选择从机器开始贪心,将任务和机器以时间从大到小,相同则使等级从大到小进行排序,然后对于每一个任务,记录工作时间大于它的机器,然后从任务的等级开始往上搜,搜到即记录并跳出,最后输出即可。

    推荐blog:

    http://blog.csdn.net/a601025382s/article/details/38046927

    http://www.cnblogs.com/-sunshine/p/3862810.html

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=1e5+10;
     6 
     7 int n,m,maxx,sum,coun;
     8 struct node
     9 {
    10     int time,level;
    11     bool operator<(const node& p)const
    12     {
    13         if(time==p.time) return level>p.level; 
    14         return time>p.time;
    15     }
    16 }a[maxn],b[maxn];
    17 int c[101];
    18 
    19 int main()
    20 {
    21     while(scanf("%d%d",&n,&m)==2)
    22     {
    23         coun=0;
    24         __int64 sum=0;
    25         for(int i=1;i<=n;i++) {scanf("%d%d",&a[i].time,&a[i].level);}
    26         for(int i=1;i<=m;i++) {scanf("%d%d",&b[i].time,&b[i].level);}
    27         sort(a+1,a+n+1);sort(b+1,b+m+1);
    28         memset(c,0,sizeof(c));
    29         //for(int i=1;i<=n;i++) printf("%d %d
    ",a[i].time,a[i].level);
    30         //for(int i=1;i<=m;i++) printf("%d %d
    ",b[i].time,b[i].level);
    31         for(int i=1,j=1;i<=m;i++)
    32         {
    33             while(j<=n&&a[j].time>=b[i].time)//统计>=当前任务时间的机器 
    34             {
    35                 c[a[j].level]++;//记录机器的等级 
    36                 j++;
    37             }
    38             for(int k=b[i].level;k<=100;k++)//从当前任务的等级开始 
    39             {
    40                 if(c[k])//找到最小的等级 
    41                 {
    42                     coun++;
    43                     c[k]--;
    44                     sum+=500*b[i].time+2*b[i].level;
    45                     break;
    46                 }
    47             }
    48         }
    49         printf("%d %I64d
    ",coun,sum);
    50     }
    51     return 0;
    52 }
    View Code
    一直地一直地往前走
  • 相关阅读:
    转:Gerrit 学习
    list, set操作
    Dice chrone execise
    【转】terminal 快捷键
    python package list
    爬虫2
    爬虫 1
    django跨表联查传输数据到前端
    vue实现鼠标移入移出事件
    pycharm意外关闭导致报错Unexpected content storage modification:
  • 原文地址:https://www.cnblogs.com/chendl111/p/5664337.html
Copyright © 2011-2022 走看看