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 }
  • 相关阅读:
    Tapestry5 Setup with HTML5 and jQuery
    CSS学习六:布局剖析
    CSS学习三:表格,表单,超链接和鼠标等。
    CSS+DIV实战
    一到关于c++继承和多态的题
    一道有关指针的题
    小程序,嘿嘿
    《犯罪心理》名言部分
    ethereal与wincap
    并发编程之:Lock
  • 原文地址:https://www.cnblogs.com/fqfzs/p/9957437.html
Copyright © 2011-2022 走看看