【Week4作业 A】DDL的恐惧【贪心】

2023-05-16

题意:

有n个作业(1<=n<=1000),每个作业都有自己的DDL与平时分。请安排做作业的顺序,拿到最多的平时分。
输入:共T个测试样例,每个测试样例共三行,第一行为作业数量n,第二行n个数表示DDL,第三行n个数表示平时分。


思路:

对DDL进行降序排序。从最后一天往前,给每一天安排要写的作业。枚举到第i天时,将所有DDL=i的作业加入大根堆,然后从大根堆里选出平时分最大的作业安排在当天。


总结:

一道贪心题,应想到该O(nlogn)的算法。
大根堆使用了priority_queue,要求大根堆用到的排序cmp应新在一个struct里重载(),而且大根堆对应a<b。使用与学过的大根堆使用方法相同,q.push(x),q.top(),q.pop()等。


代码:

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

struct homework
{
	int ddl;
	int score;
};
struct cmp	//大根堆用到的排序
{
	bool operator() (const homework&a,const homework&b)
	{
		return a.score<b.score;	//注意大根堆对应< 
	}
};
bool cmp1(const homework&a,const homework&b)	//ddl排序
{
	return a.ddl>b.ddl;
}
int main()
{
	int t;
	cin>>t;
	for(int t1=0; t1<t; t1++)
	{
		int n;
		cin>>n;
		homework *hw=new homework[n];
		for(int i=0; i<n; i++)
			cin>>hw[i].ddl;
		for(int i=0; i<n; i++)
			cin>>hw[i].score;
		//对ddl进行排序
		sort(hw,hw+n,cmp1);
		//大根堆
		priority_queue<homework,vector<homework>,cmp> q;
		int sum=0;	//选择的作业总分数
		int index=0;	//作业索引
		int lastddl=hw[0].ddl;	//最后一天
		for(int i=lastddl; i>=1; i--)	//从最后一天往前
		{
			//将第i天ddl的作业加入最大堆
			if(index<n)
				while(hw[index].ddl==i)
				{
					q.push(hw[index]);
					index++;
					if(index>=n)	break;
				}
			//选择分数最大的作业
			if(!q.empty())
			{
				homework maxhw=q.top();
				q.pop();
				sum+=maxhw.score;
			}
		}
		//总降低分数
		int ans=0;
		for(int i=0; i<n; i++)
			ans+=hw[i].score;
		ans=ans-sum;
		cout<<ans<<endl;
		while(!q.empty())
			q.pop();
		delete []hw;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Week4作业 A】DDL的恐惧【贪心】 的相关文章

  • SQL DDL从MySQL到Oracle

    最新一个项目的sql ddl为MySQL准备的 xff0c 我想在Oracle中使用 之前不太了解两者的区别 xff0c 结果报错一坨 于是顶着头皮开始看什么问题 xff0c 以下是我陷过的坑 xff0c 让大家看看 废话少说 xff0c
  • Week4 作业 A - DDL 的恐惧【贪心算法】

    题目大意 给定n个作业ddl xff0c 以及每个作业如果没有按时完成扣掉的分数 ddl和分数都用整数表示 xff0c 一天可以完成一个作业 xff0c 求最少得扣多少分 输入 输入包含T个测试用例 输入的第一行是单个整数T xff0c 为
  • Hive ddl语法使用详解

    一 前言 使用过关系型数据库mysql的同学对mysql的ddl语法应该不陌生 xff0c 使用ddl语言来创建数据库中的表 索引 视图 存储过程 触发器等 xff0c hive中也提供了类似ddl的语法 本篇将详细讲述hive中ddl的使
  • HIVE操作语句--DDL篇

    未经允许 xff0c 禁止转载 xff0c 一经发现 xff0c 必定严究 HIVE 1 1 创建数据库1 2 查看所有数据库1 3 查看数据库信息1 xff09 显示数据库信息2 xff09 显示数据库详细信息 1 4 删除数据库1 xf
  • Hive(二) -- ddl

    Hive支持标准SQL xff0c 同时又有自己的特点 xff0c 属于方言版SQL Hive的ddl主要包含对于数据库和表的查询 创建和删除 dml包含数据查询和插入 xff0c 其中插入有load和insert两种方式 xff0c 针对
  • Nacos2.2.0适配Oracle12C-建表ddl语句

    span class token keyword create span span class token keyword table span CONFIG INFO span class token punctuation span I
  • DataGrip连接Hive执行DDL操作报错:「FAILED: ParseException line 1:5 cannot recognize input near ‘show‘ ‘indexe

    DataGrip连接Hive执行DDL操作报错 xff1a FAILED ParseException line 1 5 cannot recognize input near show indexes on in ddl statemen
  • SQL 四种语言基本操作

    SQL Structured Query Language 结构化查询语言 SQL主要4个部分 数据定义类SQL DDL DATE DEFINITION LANGUAGE CREATE 创建数据库及其对象 表 索引 视图 存储过程 函数和触
  • mysql学习笔记(3)_DDL(Data Define Language)

    DDL Data Define Language 数据定义语言 数据定义语言 库和表的管理 1 库的管理 创建 修改 删除 2 表的管理 创建 修改 删除 创建 create 修改 alter 删除 drop 库的管理 1 创建名为book
  • DDL和DML常用语句总结

    DDL语句 常用来操作数据库 数据库表 用到的语句 create show alter drop 1 操作数据库 CRUD 1 C Create 创建 创建数据库 create database 数据库名称 创建数据库 判断不存在 再创建
  • 插入操作可以让另一个 DDL 操作等待吗?

    我试图理解出现以下错误的原因 ORA 04021 timeout occurred while waiting to lock object 运行命令时过程引发此错误alter table lt
  • 什么是 Visio Enterprise Architect 的良好替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 Visio 2002 2003 Enterprise Architect 直观地进行数据库架构设计 然后前向生成 DDL 来
  • 无法将数字类型转换为布尔值

    ALTER TABLE products ALTER COLUMN power price DROP DEFAULT ALTER TABLE products ALTER COLUMN power price TYPE bool USING
  • BigQuery - 创建外部表

    How use CREATE EXTERNAL TABLEBigQuery 中的 DDL 语句 另一个大数据仓库解决方案 如 SnowFlake 和 Hive Based Presto AWS Athena 都有它 而且它非常有用 更新 1
  • 如何从 sqlite (3.6.21) 表中删除约束?

    我有下表 CREATE TABLE child id INTEGER PRIMARY KEY parent id INTEGER CONSTRAINT parent id REFERENCES parent id description T
  • 使用 ALTER 删除 MySQL 中存在的列

    如果 MySQL 表中存在某列 如何使用 ALTER 删除该列 我知道我可以使用ALTER TABLE my table DROP COLUMN my column 但是如果my column不存在 是否有替代语法来有条件地删除列 我使用的
  • Redshift 中“ADD COLUMN IF NOT EXISTS”的解决方法

    我正在尝试通过 Spark Redshift 执行 S3 复制操作 并且希望在运行复制命令之前修改 Redshift 表结构 以便添加任何缺失的列 它们应该都是 VARCHAR 我能做的是在运行副本之前发送一个 SQL 查询 所以理想情况下
  • Hibernate DDL表动态创建

    我有一个 spring boot 项目 我正在使用 hibernate 将我的实体映射到数据库 但是现在我有一个新的要求 我需要能够在数据库中动态创建表 而无需任何映射 到目前为止 有谁知道一些框架来帮助我处理这个问题 我想执行 SQL 或
  • 将自动增量列添加到按日期排序的现有表中

    我在数据库中有一个名为 tickets 的现有表 其中包含以下列 id string Primary Key contains UUID like e6c49164 545a 43a1 845f 73c5163962f2 date bigi
  • Spring JPA DDL 文件生成 - 如何在生成之前删除或清理文件

    我正在使用此设置来生成 ddl 文件 spring jpa properties javax persistence schema generation create source metadata spring jpa propertie

随机推荐