zoukankan      html  css  js  c++  java
  • hdu1789 Doing Homework again(贪心+排序)

    Doing Homework again

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 18294    Accepted Submission(s): 10648


    Problem Description
    Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce his score of the final test. And now we assume that doing everyone homework always takes one day. So Ignatius wants you to help him to arrange the order of doing homework to minimize the reduced score.
     
    Input
    The input contains several test cases. The first line of the input is a single integer T that is the number of test cases. T test cases follow.
    Each test case start with a positive integer N(1<=N<=1000) which indicate the number of homework.. Then 2 lines follow. The first line contains N integers that indicate the deadlines of the subjects, and the next line contains N integers that indicate the reduced scores.
     
    Output
    For each test case, you should output the smallest total reduced score, one line per test case.
     
    Sample Input
    3
    3
    3 3 3
    10 5 1 
    3
    1 3 1
    6 2 3
    7
    1 4 6 4 2 4 3
    3 2 1 7 6 5 4
     
    Sample Output
    0
    3
    5

    做作业,每门作业都有规定的期限和分值,每天只能做一门,如果不能在规定时间内做完,就会扣相应的分数,问最少扣多少分。

    可以先按期限从小到大排序,如果期限相同就按分值从大到小排。排完序之后从第一天开始一门门做过去,还有一个要注意的问题就是如果有两门课的作业期限相同,分值都很高,而因为时间问题只能做其中一门,但在他们前面有一门课的分值比较低,那么就不要做那门分值低的,而改做这两门分值高的

    代码实现就是每遇到这样的情况就去前面找有没有分值比较低的,而且没有被扣过分的(扣过分的会标记)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct node
     4 {
     5     int day,score;
     6     int flag;
     7 } a[1005];
     8 bool cmp(node x,node y)
     9 {
    10     if(x.day==y.day)
    11     {
    12         return x.score>y.score;
    13     }
    14     else
    15     {
    16         return x.day<y.day;
    17     }
    18 }
    19 void init()
    20 {
    21     for(int i=0; i<1005; i++)
    22     {
    23         a[i].day=0;
    24         a[i].score=0;a[i].flag=1;
    25     }
    26 }
    27 int main()
    28 {
    29     int t;
    30     while(~scanf("%d",&t))
    31     {
    32         while(t--)
    33         {
    34             int n;
    35             scanf("%d",&n);
    36             init();
    37             for(int i=0;i<n;i++)
    38             {
    39                 scanf("%d",&a[i].day);
    40             }
    41             for(int i=0;i<n;i++)
    42             {
    43                 scanf("%d",&a[i].score);
    44             }
    45             sort(a,a+n,cmp);
    46             int temp=1,ans=0;
    47             for(int i=0;i<n;i++)
    48             {
    49                 if(a[i].day>=temp)
    50                 {
    51                     temp++;
    52                     continue; 
    53                 }
    54                 int p=a[i].score,pos=i;
    55                 for(int j=0;j<i;j++)
    56                 {
    57                     if(a[j].score<p&&a[j].flag)//前面有耗时少的,而且没有扣过分 
    58                     {
    59                         p=a[j].score;
    60                         pos=j;
    61                     }
    62                 }
    63                 ans+=p;
    64                 a[pos].flag=0;//扣分标记 
    65             }
    66             printf("%d
    ",ans);
    67         }
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    经济地理国情监测
    《城市轨道交通——产业关联理论与应用》读书笔记
    《区域经济学原理》读书笔记(上)
    《国家经济地理》杂志之第一期:探寻中国经济的“第四极”
    《地理空间分析——原理、技术与软件工具》读书笔记
    《国家经济地理》杂志第二期:再望万里海疆——走向海洋经济的中国“大航海时代”
    国家统计遥感项目、商业图盟与品牌地图的碎碎念
    关于城市规划中的投融资规划
    区域功能定位对北京人口总量及分布的影响
    《中国经济地理——经济体成因与地缘架构》读书笔记
  • 原文地址:https://www.cnblogs.com/fqfzs/p/9957437.html
Copyright © 2011-2022 走看看