zoukankan      html  css  js  c++  java
  • 贪心初步 hdu1789 Doing Homework again

    一道非常经典的题目

    题目地址

    题目大意

    给出N个作业的截至日期,和N个作业不交所扣掉的分数,要求输出扣除分数做少的方案。

    正确的策略是:

    1. 扣除分数大的先做
    2. 扣除分数相同,先截止的先做
    3. 做一件事的时候,从截止时间开始向第一天遍历,如果当天没有被作业占据则标记为占据。做这件事的日期越大越好。
    4. 如果不能满足3的条件,则为不能完成
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string>
     4 #include <string.h>
     5 
     6 #define MAX 1010
     7 
     8 using namespace std;
     9 int V[MAX];
    10 int E[MAX];
    11 bool t[MAX];
    12 int order[MAX];
    13 
    14 void init()
    15 {
    16     memset(t,0,MAX * sizeof(bool));
    17     return ;
    18 }
    19 
    20 bool cmpA (int a ,int b)
    21 {
    22     if(V[a] > V[b])
    23     {
    24         return 1;
    25     }
    26     else if(V[a] == V[b] && E[a] < E[b])
    27     {
    28         return 0;
    29     }
    30     else 
    31         return 0;
    32 }
    33 
    34 int main()
    35 {
    36     int T;
    37     while(~scanf("%d",&T))
    38     {
    39         for (int i = 0; i < T; ++i)
    40         {
    41             init();
    42             int N;
    43             int All = 0;
    44             int ans = 0;
    45             scanf("%d",&N);
    46             for (int j = 0; j < N; ++j)
    47             {
    48                 scanf("%d",&E[j]);
    49             }
    50             for (int j = 0; j < N; ++j)
    51             {
    52                 scanf("%d",&V[j]);
    53                 All = All + V[j];
    54                 order[j] = j;
    55             }
    56             //////////////////////////
    57             sort(order,order + N,cmpA);
    58             /////////////////////////////
    59             //////////////////////////////
    60             for (int j = 0; j < N; ++j)
    61             {
    62                 int event = order[j];
    63                 bool flag = 0;
    64                 for (int k = E[event]; k >= 1; k--)
    65                 {
    66                     if(!t[k])
    67                     {
    68                         ans = ans + V[event];
    69                         t[k] = 1;
    70                         flag = 1;
    71                     }
    72                     if(flag) break;
    73                 }
    74             }
    75             ///////////////////////////
    76             cout << All - ans << endl;
    77 
    78         }
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    update语句中存在''语法书写方式
    CSS的代码风格
    CSS的语法规范
    CSS层叠样式表导读
    CSS简介
    HTML基本标签(下)
    HTML基本标签(上)
    HTML简介导读
    集合及其运用
    字典的镶嵌
  • 原文地址:https://www.cnblogs.com/ticsmtc/p/4969559.html
Copyright © 2011-2022 走看看