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
    一直地一直地往前走
  • 相关阅读:
    git项目管理-合并请求
    记录一次git stash找回删除的存储
    chrome 下 position:fixed失效(react)
    css3 var变量
    rc-select下拉选择控件库推荐
    (转载)vue路径后面去除#号
    本地配置独立域名环境
    javascript判断pc还是手机端
    javascript复制到粘贴板的方案
    javascript轮播插件的使用(TouchSlide)
  • 原文地址:https://www.cnblogs.com/chendl111/p/5664337.html
Copyright © 2011-2022 走看看