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

题目大意

给定n个作业ddl,以及每个作业如果没有按时完成扣掉的分数(ddl和分数都用整数表示),一天可以完成一个作业,求最少得扣多少分。

输入

输入包含T个测试用例。输入的第一行是单个整数T,为测试用例的数量。
每个测试用例以一个正整数N开头(1<=N<=1000),表示作业的数量。
然后两行。第一行包含N个整数,表示DDL,下一行包含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
解释
  • 上方有三组样例。
  • 对于第一组样例,有三个作业它们的DDL均为第三天,ZJM每天做一个正好在DDL前全部做完,所以没有扣分,输出0。
  • 对于第二组样例,有三个作业,它们的DDL分别为第一天,第三天、第一天。ZJM在第一天做了第一个作业,第二天做了第二个作业,共扣了3分,输出3。
思路

首先想想这个题有那些贪心原则呢?

  1. 尽量把扣分多的先完成
  2. 在不超过ddl的情况下尽量往后推,这样可以给我们留出更多自由且质量更高的时间(靠前的时间相比靠后的时间可以用来完成更多的作业)。

根据以上的贪心原则,我们可以指定以下算法:

  • 将所有ddl按照扣分多少从大到小排序
  • 从头开始遍历每一个ddl,对于每一个ddl,从ddl那天开始往前寻找,直到找到一天,这一天还没有任务,然后我们利用这一天来完成这个ddl对应的任务。如果找不到,那只能放弃这个任务,扣除相应的分数。
完整代码
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
int T, N;
struct DDL{
	int t;
	int p;
	DDL(int t=0, int p=0)
	{
		this->t = t;
		this->p = p;
	}
	bool operator <(const DDL &d) const
	{
		return p > d.p;
	}
}ddl[1005];

int main ()
{
	cin>>T;
	for(int w=0;w<T;w++)
	{
		cin>>N;
		for(int i=0;i<N;i++)	cin>>ddl[i].t;
		for(int i=0;i<N;i++)	cin>>ddl[i].p;
		
		sort(ddl, ddl+N);
		int score=0;
		map<int, bool> arrange;
		for(int i=0;i<N;i++)
		{
			int j=ddl[i].t;
			for(;j>=1;j--)
			{
				if(arrange.find(j) == arrange.end())
				{
					arrange[j] = true;
					break;
				}
			}
			if(j==0)	score += ddl[i].p;
		}
		cout<<score<<endl; 
	}
	return 0;
} 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种开源的关系型数据库管理系统,它支持多种操作系统,并且广泛应用于Web应用程序的后端数据存储。MySQL的DDL(Data Definition Language)是用于定义和管理数据库结构的基础操作。 以下是MySQL中DDL的基础操作: 1. 创建数据库:使用CREATE DATABASE语句可以创建一个新的数据库。例如,CREATE DATABASE mydatabase; 2. 删除数据库:使用DROP DATABASE语句可以删除一个已存在的数据库。例如,DROP DATABASE mydatabase; 3. 创建表:使用CREATE TABLE语句可以创建一个新的数据表。在CREATE TABLE语句中,需要指定表名和表的列及其属性。例如,CREATE TABLE mytable (id INT, name VARCHAR(50)); 4. 删除表:使用DROP TABLE语句可以删除一个已存在的数据表。例如,DROP TABLE mytable; 5. 修改表结构:使用ALTER TABLE语句可以修改已存在的数据表的结构,包括添加、修改和删除列等操作。例如,ALTER TABLE mytable ADD COLUMN age INT; 6. 添加主键:使用ALTER TABLE语句可以为数据表添加主键约束,以确保每行数据的唯一性。例如,ALTER TABLE mytable ADD PRIMARY KEY (id); 7. 添加外键:使用ALTER TABLE语句可以为数据表添加外键约束,以确保与其他表的关联完整性。例如,ALTER TABLE mytable ADD FOREIGN KEY (customer_id) REFERENCES customers(id); 8. 创建索引:使用CREATE INDEX语句可以为数据表创建索引,以提高查询性能。例如,CREATE INDEX idx_name ON mytable (name); 这些是MySQL中DDL的基础操作,通过这些操作可以定义和管理数据库的结构。如果你有更具体的问题或者需要了解更多高级的DDL操作,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值