题目描述:

ZJM 有 n 个作业,每个作业都有自己的 DDL,如果 ZJM 没有在 DDL 前做完这个作业,那么老师会扣掉这个作业的全部平时分。

所以 ZJM 想知道如何安排做作业的顺序,才能尽可能少扣一点分。
请你帮帮他吧!


Input:

输入包含T个测试用例。输入的第一行是单个整数T,为测试用例的数量。

每个测试用例以一个正整数N开头(1<=N<=1000),表示作业的数量。

然后两行。第一行包含N个整数,表示DDL,下一行包含N个整数,表示扣的分。

sample input:

 333 3 310 5 131 3 16 2 371 4 6 4 2 4 33 2 1 7 6 5 4

**

output:

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

sample output:

 035

NOTE:

上方有三组样例。对于第一组样例,有三个作业它们的DDL均为第三天,ZJM每天做一个正好在DDL前全部做完,所以没有扣分,输出0。对于第二组样例,有三个作业,它们的DDL分别为第一天,第三天、第一天。ZJM在第一天做了第一个作业,第二天做了第二个作业,共扣了3分,输出3。

个人思路:

先将DDL按照V也就是扣分按照降序进行预处理。然后按照扣分数依次遍历。为什么要进行这样的预处理呢?因为我们考虑既然要使得扣分数最少,那么应该在当前合理的情况下,先安排扣分数也就是V值大的DDL。
看下面的代码:

for (int j = 0; j < n; ++j) {for (int j1 = a[j].ddl; j1 >= 1; --j1) {if (d[j1] == 0) {d[j1] = 1;a[j].v = 0;break;}        }_score = _score + a[j].v;}

d[]是一个数组,用来标记当天是否已经安排。
对于第j个DDL a[j].ddl来说,从ddl这一天开始往前遍历d,如果有空闲的位置,那么优先安排a[j].ddl,安排后,其扣分置为0,break,最终扣分+=v;

思路很简单,但是为什么这样做是最优的呢?

 先假设这样做不是最优的,那么用交换证明可证,将最优解
中的一个解换成咱们贪心算法中的解,结果并没有变差,所以这是可行的。

代码实现:

使用了一贯的结构体,重载了 < 号,按降序排列。

#include<iostream>
#include<algorithm>
using namespace std;
struct dv {int ddl, v;bool operator<(const dv& q)const {return v > q.v;}
};
int t,n;//t个样例
dv a[1001];int main() {cin >> t;for (int i = 0; i < t; ++i) {cin >> n;int d[1001] = { 0 };int _score = 0;for (int j = 0; j < n; ++j) {cin >> a[j].ddl;}for (int j = 0; j < n; ++j) {cin >> a[j].v;}sort(a, a + n);for (int j = 0; j < n; ++j) {for (int j1 = a[j].ddl; j1 >= 1; --j1) {if (d[j1] == 0) {d[j1] = 1;a[j].v = 0;break;}        }_score = _score + a[j].v;}cout << _score << endl;}return 0;
}

Week4—A—DDL的恐惧相关推荐

  1. SDU_week4_A - DDL 的恐惧(贪心+作业调度问题)

    题目描述 ZJM 有 n 个作业,每个作业都有自己的 DDL,如果 ZJM 没有在 DDL 前做完这个作业,那么老师会扣掉这个作业的全部平时分. 所以 ZJM 想知道如何安排做作业的顺序,才能尽可能少 ...

  2. SDU程序设计思维实践题目总结

    题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...

  3. 《学习如何学习》week4 2.3先难后易考试的小技巧总结

    week4 2 Renaissance Learning and Unlocking Your Potential II 复兴学习释放潜力 2.3 Hard-Start-Jump-to-Easy-Sc ...

  4. 分布式深度学习DDL解析

    分布式深度学习DDL解析 一.概述 给一个庞大的GPU集群,在实际的应用中,现有的大数据调度器会导致长队列延迟和低的性能,该文章提出了Tiresias,即一个GPU集群的调度器,专门适应分布式深度学习 ...

  5. SQL概念及DDL语句

    SQL概念 SQL全称(Structured Query Language):结构化查询语句,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询和管理关系型数据库. 其实就 ...

  6. MySQL 5.6中如何定位DDL被阻塞的问题

    在上一篇文章<MySQL 5.7中如何定位DDL被阻塞的问题>中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata ...

  7. java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

  8. mysql onlibe all_MySQL Online DDL

    虽然FIC可以让InnoDB存储引擎免创建临时表,从而提高索引创建的效率.但正如前面所说,索引创建时会阻塞表上的DML操作.OSC虽然解决了上述的部分问题,但是还是有很大的局限性.MySQL5.6版本 ...

  9. Sql语法---DDL

    1.SQL的定义 结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言. 2.SQL的作用 通过SQL语句我们可以方便的操作数据库中 ...

最新文章

  1. GPT-3:人工智能的新突破
  2. ARM与RISC-V之争,后起之秀的优势在哪儿?
  3. HDLBits 系列(11)All about Adder
  4. 彻底明白TCP的三次握手与四次挥手
  5. 项目开发中的注意事项
  6. docker kubernetes--
  7. HyperLink的绑定用法(做笔记)
  8. 什么是IOC(控制反转)、DI(依赖注入)举个形象的例子通俗易懂
  9. 域名/网站名/URL
  10. Java语言速览:StackOverflow
  11. C/C++[codeup 2003, 2056]图形输出
  12. 16华为网络技术大赛模拟题答案详解
  13. 更改以太网共享属性家庭网络连接值,解决电脑笔记本连接校园网显示无internet无法开热点或开热点手机无ip分配问题
  14. nfs总结之工作原理
  15. 大二实训(二)问答题
  16. python实现multi函数参数个数不限、返回所有参数乘积_实现multi( )函数,参数个数不限,返回所有参数的乘积。_学小易找答案...
  17. Cannot find module /node_modules/cz-conventional-changelog
  18. OC block的回环引用
  19. 没有人能够一味地淡定,没有人能够一味地忍受
  20. Python停车管理系统毕业设计-附源码271400

热门文章

  1. .metadata\.plugins\org.eclipse.wst.server.core
  2. IObitUninstaler官网最新下载 中文,绿色版IObitUninstaler下载
  3. 计算机课程ps学什么意思,【计算机基础论文】计算机基础教学中PS课程的方法(共5197字)...
  4. 计算机视觉(AI)面试大全
  5. NFC无线充电(WLC)介绍
  6. Android运行时Crash自动恢复框架-Recovery
  7. 测试开发基础 | Python 算法与数据结构面试题系列一(附答案)
  8. mmdetection里的image_demo
  9. 解决laravel-admin 树状模型删除失效
  10. 兔老大的系统设计(二)定时系统(延时队列)