zoukankan      html  css  js  c++  java
  • HDU1789 Doing Homework again

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789

      本题的目的是制定一个写作业的顺序,使得最后被扣的分数最少,最后输出最少的扣分数。要想扣分少,就必须优先考虑分值大的家庭作业。因此采用贪心策略比较合适,优先将分值大的作业先做完,剩下做不完的作业加起来自然是最小的。这里的做法是先按照家庭作业的分值大小进行降序排序,然后遍历在决策哪天做哪门作业。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 #define N 1005
     6 //标志数组,表示第i天有是否处于空闲状态 
     7 bool flag[N]; 
     8 //定义homework结构体 
     9 struct task{
    10     //d 截止日期
    11     //s 分值
    12     //isdone 有没有被完成 
    13     int d,s;
    14     bool isdone;
    15 };
    16 //存储 家庭作业 
    17 task T[N];
    18 bool DESC(task t1,task t2){
    19     return t1.s>t2.s;
    20 }
    21 int main(){
    22     int n;
    23     cin>>n;
    24     while(n--){
    25         //将flag数组重置 
    26         memset(flag,false,sizeof(flag));
    27         int m=0;
    28         cin>>m;
    29         //将homework存入数据结构中 
    30         for(int i=1;i<=m;i++){
    31             cin>>T[i].d;
    32             T[i].isdone=false;
    33         }
    34         for(int i=1;i<=m;i++)
    35             cin>>T[i].s;
    36         //按照作业的分值大小降序排序 
    37         sort(T+1,T+m+1,DESC);
    38         //贪心算法 
    39         //优先考虑分值大的家庭作业
    40         //如果截止日期那天没有要做的作业,则将该作业计划在那天做
    41         //否则从截止日期往前推,直到发现空闲的一天 
    42         for(int i=1;i<=m;i++){
    43             for(int j=T[i].d;j>0;j--)
    44                 if(flag[j]==false){
    45                     flag[j]=true;
    46                     T[i].isdone=true;
    47                     break;
    48                 }
    49         }
    50         //计算未完成的作业所造成的扣分值 
    51         int result=0;
    52         for(int i=m;i>0;i--){
    53             if(T[i].isdone==false)
    54                 result+=T[i].s;
    55         }
    56         cout<<result<<endl;
    57     }
    58     return 0;
    59 } 
  • 相关阅读:
    Android应用视觉效果设计技巧
    Android实现图片缩放与旋转
    schema 对象的简单介绍
    Index Scans 索引扫描
    Oracle Database Transaction Isolation Levels 事务隔离级别
    第一篇博客,纪念一下,终于开通啦!
    Linux 开机引导流程
    springBoot中tomcat默认端口修改
    面向服务架构之RPC原理与实例
    vs2008中xlslib与libxls库的编译及使用
  • 原文地址:https://www.cnblogs.com/vmoor2016/p/6611200.html
Copyright © 2011-2022 走看看