题意:

问题描述
伊格内修斯有很多功课要做。每个老师都会给他一个交作业的截止日期。如果在截止日期之后提交作业,老师会减少他的最终考试成绩。现在我们假设每个人做功课都需要一天的时间。所以希望你帮助他安排作业的次序,以尽量减少分数。
输入
输入包含多个测试用例。输入的第一行是一个整数T,即测试用例的数量。 T测试用例如下。
每个测试用例都以一个表示作业数量的正整数N(1 <= N <= 1000)开始。然后是2行。第一行包含N个表示主题最后期限的整数,下一行包含N个表示分数降低的整数。
产量
对于每个测试用例,您应输出最小的总体缩减分数,每个测试用例一行。
示例输入
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
 
示例输出
0
3

5

分析,可在意识到这是一种贪心算法,但是要考虑贪心的策略。有按照截至日期排序和扣的分数排序。可以从扣的分数排序思考。将扣的分数从大到小排序。用数组c【】足够大表示第几天完成的内容的所值分数。有n组数据看最后一组数据分析:最后一组数据排序后为:

7 6 5 4 3 2 1

4 2 4 3 1 4 6

正常情况:

最大的那个一定要在四天前完成,他的价值最大,为了最大化利用资源就让他在第四天完成,那么c[4]=7;

第二个6 2,同理在第二天完成。

特殊情况:

第三组数据5 4.因为c[4]已经被用过,并且用过的那个数据价值一定比当前5价值高,所以可以从第四天不行,就让他的前一天完成这组数据,即c[3]=5(你可能会问遇到第三天恰好完成的怎么办,首先有两点,第一:后面第三天的分数就算没位置舍弃价值也比舍弃这个数据价值大。第二:第三天恰好完成的可以看看第二天,第一天有没有被占用,如果有空,那么就从第三天往前查找遍历,入座。如果没有空值,可以肯定前面的值都比第三天贵很多,不划算舍弃,所以当到第0个位置都没有座位,就是必须要牺牲的。)

这种方式就是最大化减小扣的分数。

代码如下:

import java.util.Scanner;public class 杭电1789 {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int T=sc.nextInt();for(int TT=0;TT<T;TT++){int num=0;int n=sc.nextInt();//功课数量int a[]=new int[n];//最后期限int b[]=new int[n];//降分数int c[]=new int[10000];boolean[] d=new boolean[n];for(int i=0;i<n;i++){a[i]=sc.nextInt(); }for(int i=0;i<n;i++){b[i]=sc.nextInt();}for(int i=0;i<n;i++)//按照截至日期升序{for(int j=i;j<n;j++){if(b[i]<b[j]){int tem=a[i];a[i]=a[j];a[j]=tem;tem=b[i];b[i]=b[j];b[j]=tem;}if(b[j]==b[i]&&a[i]>a[j])//相同日期大的在左边,大的要先交{int tem=b[i];b[i]=b[j];b[j]=tem;}}}for(int i=0;i<n;i++)//对数据逐个处理{if(c[a[i]-1]==0) {c[a[i]-1]=b[i];}//正常情况。注意数组有c[0];对应的是第一天else if(c[a[i]-1]!=0)//特殊情况{for(int j=a[i]-1;j>=0;j--){if(c[j]==0) {c[j]=b[i];break;}else if(j==0&&c[0]!=0) {num=num+b[i];}//在他之前没位置,在座的都比他贵,只能舍弃了}}}System.out.println(num);}}
}

杭电1789贪心java实现相关推荐

  1. 杭电oj 2099 java实现

    #杭电oj 2099 java 整除的尾数 一个整数,只知道前几位,不知道末二位,被另一个整体除尽了, 那么该数的末二位该是什么呢? import java.util.*; public class ...

  2. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  3. 杭电oj(Java版)——1713 相遇周期

    相遇周期 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 杭电 HDU 1248 Java寒冰王座

    点击打开链接 <pre name="code" class="java">public class p1248 {public static voi ...

  5. 杭电oj(java)1091

    题目特点:当输入值为0 0时结束程序. 利用break:和if else分支结构完成 注意:使用&& &&(与)同真为真,一假全假. 故使用时应注意,在a&&a ...

  6. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列

    附上题目链接:杭电oj1257 这个题目有动态规划和贪心两种解决方式. 贪心法1: 对于导弹我们知道只可以从大到小的反导,一个系统必须从大到小排列.那么我们就可以选择从最高的那个导弹入手,往右找仅次于 ...

  7. java最简单的并查集(不想交集合)以及杭电1272

    并查集要有的一些属性:value:表示当前值,指针:(不一定是指针)指向父节点. 还有一个属性number:表示该树存在的总个数.(也可以用深度表示).我用小树插在大树上. 如果是普通数字表示的树,可 ...

  8. 用java爬取杭电oj已ac代码

    前言 电脑的硬盘突然坏了,新安装的eclipse的代码全没了,后来发现杭电上已经ac的代码可以查看到,我是个有强迫症的人,我宁愿做很多件不同的事也不愿意做一件相同的事(复制黏贴)许多次,所以就突发奇想 ...

  9. 杭电1430康托 bfs(java)

    魔板: Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版--魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板 ...

最新文章

  1. OpenStack Heat模板详解
  2. python-判断语句介绍
  3. LibreOJ 数列分块入门
  4. 2.CCGridAction(3D效果),3D反转特效,凸透镜特效,液体特效,3D翻页特效,水波纹特效,3D晃动的特效,扭曲旋转特效,波动特效,3D波动特效
  5. redisson用阿里云集群版redis的问题_redission 序列化问题追踪
  6. 经典面试题(12):关于事件循环,以下代码将输出什么?
  7. 手机端html5 面试,今日头条 张祖俭 - H5动画在移动平台上的性能优化实践
  8. 低通滤波器 java_低通滤波器 - java开发指南博客 【转载】 - ITeye博客
  9. python接口自动化(十五)--参数关联接口(详解)
  10. Halcon内参外参畸变矫正
  11. java从入门到精通 人民邮电_Java从入门到精通【人民邮电出版社】课后习题答案全集...
  12. 使用apt更新和升级系统软件
  13. 使用Androidkiller或APKIDE编译APK文件时出现libpng error: Not a PNG file的错误
  14. 煮酒论英雄——点评三国人物
  15. SONET 的OC 级/STS 级与SDH 的STM 级的对应关系(转)
  16. halcon测量总结
  17. oracle中排序--拼音、笔画、偏旁部首
  18. Air Jordan 33 Performance Review
  19. 两个日期相差月数计算公式
  20. 巨大金中华,烽火普天下

热门文章

  1. C++ Primer 5th笔记(chap 13 拷贝控制) 对象移动
  2. Qt 原理-MOC(2) QObject.h
  3. 近世代数--整环上的唯一分解问题--唯一分解整环中元素的标准分解式
  4. MySQL—事务及其特征
  5. 密码学基础知识(九)密钥管理
  6. 蜜罐中利用jsonp跨域漏洞和xss漏洞的分析
  7. 适合新手入门的漏洞调试与分析—CVE-2010-3333
  8. android插上耳机仍用扬声器播放音频
  9. 4、CSS 高级语法
  10. 6、HTML有序列表+无序列表+定义列表