Week4—A—DDL的恐惧
题目描述:
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的恐惧相关推荐
- SDU_week4_A - DDL 的恐惧(贪心+作业调度问题)
题目描述 ZJM 有 n 个作业,每个作业都有自己的 DDL,如果 ZJM 没有在 DDL 前做完这个作业,那么老师会扣掉这个作业的全部平时分. 所以 ZJM 想知道如何安排做作业的顺序,才能尽可能少 ...
- SDU程序设计思维实践题目总结
题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...
- 《学习如何学习》week4 2.3先难后易考试的小技巧总结
week4 2 Renaissance Learning and Unlocking Your Potential II 复兴学习释放潜力 2.3 Hard-Start-Jump-to-Easy-Sc ...
- 分布式深度学习DDL解析
分布式深度学习DDL解析 一.概述 给一个庞大的GPU集群,在实际的应用中,现有的大数据调度器会导致长队列延迟和低的性能,该文章提出了Tiresias,即一个GPU集群的调度器,专门适应分布式深度学习 ...
- SQL概念及DDL语句
SQL概念 SQL全称(Structured Query Language):结构化查询语句,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询和管理关系型数据库. 其实就 ...
- MySQL 5.6中如何定位DDL被阻塞的问题
在上一篇文章<MySQL 5.7中如何定位DDL被阻塞的问题>中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata ...
- java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- mysql onlibe all_MySQL Online DDL
虽然FIC可以让InnoDB存储引擎免创建临时表,从而提高索引创建的效率.但正如前面所说,索引创建时会阻塞表上的DML操作.OSC虽然解决了上述的部分问题,但是还是有很大的局限性.MySQL5.6版本 ...
- Sql语法---DDL
1.SQL的定义 结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言. 2.SQL的作用 通过SQL语句我们可以方便的操作数据库中 ...
最新文章
- GPT-3:人工智能的新突破
- ARM与RISC-V之争,后起之秀的优势在哪儿?
- HDLBits 系列(11)All about Adder
- 彻底明白TCP的三次握手与四次挥手
- 项目开发中的注意事项
- docker kubernetes--
- HyperLink的绑定用法(做笔记)
- 什么是IOC(控制反转)、DI(依赖注入)举个形象的例子通俗易懂
- 域名/网站名/URL
- Java语言速览:StackOverflow
- C/C++[codeup 2003, 2056]图形输出
- 16华为网络技术大赛模拟题答案详解
- 更改以太网共享属性家庭网络连接值,解决电脑笔记本连接校园网显示无internet无法开热点或开热点手机无ip分配问题
- nfs总结之工作原理
- 大二实训(二)问答题
- python实现multi函数参数个数不限、返回所有参数乘积_实现multi( )函数,参数个数不限,返回所有参数的乘积。_学小易找答案...
- Cannot find module /node_modules/cz-conventional-changelog
- OC block的回环引用
- 没有人能够一味地淡定,没有人能够一味地忍受
- Python停车管理系统毕业设计-附源码271400
热门文章
- .metadata\.plugins\org.eclipse.wst.server.core
- IObitUninstaler官网最新下载 中文,绿色版IObitUninstaler下载
- 计算机课程ps学什么意思,【计算机基础论文】计算机基础教学中PS课程的方法(共5197字)...
- 计算机视觉(AI)面试大全
- NFC无线充电(WLC)介绍
- Android运行时Crash自动恢复框架-Recovery
- 测试开发基础 | Python 算法与数据结构面试题系列一(附答案)
- mmdetection里的image_demo
- 解决laravel-admin 树状模型删除失效
- 兔老大的系统设计(二)定时系统(延时队列)