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

    Ignatius刚刚从第30届ACM / ICPC回到学校。现在他有很多作业要做。每个老师给他一个截止作业的截止日期。如果Ignatius在截止日期之后进行了家庭作业,老师将减少他的最终考试成绩。现在我们假设做每个老师的作业总是需要一天的时间。以Ignatius希望你帮他安排做作业的顺序来减少分数的减少。

    输入

    每个测试用例从正整数N(1 <= N <= 1000)开始,表示作业数。然后两行。 第一行包含N个整数,表示作业的期限,下一行包含N个整数,表示减少的分数。
    输出

    对于每个测试用例,应该输出减少的最小总分数,每个测试用例一行。

    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
    Ignatius比赛回来之后,每位老师给Ignatius一个交作业的最后期限,如果交不上去就扣分。每门作业都要一天时间完成,求最少扣多少分。先输入一个T表示有T组测试数据,接下来每组数据先输入一个N,代表有N个作业,然后输入两行,第一行表示每门作业要交的日期,第二行表示对应的如果不交这门作业要扣的分数。输出要扣的最少分数。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct node{
     4     int dayline;
     5     int descore;
     6     bool flag;
     7 }homework[1005];
     8 bool cmp(node a,node b)
     9 {
    10     if(a.dayline!=b.dayline)
    11         return a.dayline < b.dayline;  /*按期限从短到长排序*/
    12     else
    13         return a.descore>b.descore;  /*如果期限相同,按被扣分数从高到低来排序*/
    14 }
    15 
    16 int main()
    17 {
    18     int t,n,temp;
    19     while(cin>>t)
    20     {
    21         while(t--)
    22         {
    23             scanf("%d",&n); /*作业的数量*/
    24             for(int i = 0; i < n; i++)  /*读取作业的期限*/
    25                 scanf("%d",&homework[i].dayline);
    26             for(int i = 0; i < n; i++) /*读取未完成作业被扣除的分数*/
    27             {
    28                 scanf("%d",&homework[i].descore);
    29                 homework[i].flag = true; /*标记可完成*/
    30             }
    31 
    32             sort(homework,homework+n,cmp);
    33             int ans = 0; /*统计被扣除的分数*/
    34             int day = 1; /*截止日期*/
    35             for(int i = 0; i < n; i++)
    36             {
    37                if(homework[i].dayline >= day)
    38                    day++;
    39                 else{
    40                     int p = homework[i].descore;
    41                     int temp = i;
    42                     for(int j =0; j < i; j++)  /*往前面搜索,查找是否有被扣分数较小的*/
    43                         if(homework[j].descore < p && homework[j].flag) /*被扣分数较少 并且是可完成的(用来完成被扣分较大的作业)*/
    44                         {
    45                             p = homework[j].descore;
    46                             temp = j;
    47                         }
    48 
    49                     ans += p;
    50                     homework[temp].flag = false;  /*标记不可完成*/
    51                 }
    52 
    53 
    54             }
    55             cout<<ans<<endl;
    56         }
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    数据量你造吗-JAVA分页
    编写高质量代码改善java程序的151个建议——[1-3]基础?亦是基础
    概率论快速学习03:概率公理补充
    概率论快速学习02:概率公理
    项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度
    项目ITP(五) spring4.0 整合 Quartz 实现任务调度
    编写高质量代码改善java程序的151个建议——导航开篇
    概率论快速学习01:计数
    改善JAVA代码01:考虑静态工厂方法代替构造器
    Python快速学习10: 循环的对象及设计 (生活的规律)
  • 原文地址:https://www.cnblogs.com/jj81/p/7381879.html
Copyright © 2011-2022 走看看