# Doing homework again(贪心)
# Doing homework again(贪心)
题目链接:Click here~~
题意:
有 n 门作业,每门作业都有自己的截止期限,当超过截止期限还没有完成作业,就会扣掉相应的分数。问如何才能使扣分最少。
解题思路1:
把 n 门作业按分数从大到小排序,然后每次都把作业安排在离它的截止期限最近的一天(先安排在截止日期当天,如当天已有安排,则往前一天找),并把此天标记为已用,若不能安排,则扣分。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
bool vis[1000];
#define fre freopen("C:\\Users\\Dell\\Desktop\\in.txt", "r", stdin);
struct node{
int dead;
int sub;
bool operator < (const node &a)const{
return a.sub<sub;
}
}stu[1005];
int main(){
//fre;
int t, n, totsub;
cin >> t;
while (t--){
vis[0] = 1;
totsub = 0;
cin >> n;
for (int i = 0; i<n; i++)cin >> stu[i].dead;
for (int i = 0; i<n; i++)cin >> stu[i].sub, totsub += stu[i].sub;
sort(stu, stu + n);
for (int i = 0; i<n; i++){
//int k = 0;
for (int j = stu[i].dead; j >= 1; j--){
if (vis[j] == 0){ vis[j] = 1; totsub -= stu[i].sub; break; }
}
}
cout << totsub << endl;
memset(vis, 0,sizeof(vis) );
}
return 0;
}
解题思路2:
先对日期从小到大排序,如果日期相同,则扣分多的排在前面。如果相同日期内有扣分多的,则就用前面做扣分少的作业的时间来做这门作业;如果没有比他小的,就扣这门作业的分。On,大大优于前面的算法。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<memory.h>
#include<queue>
#include <bits\stdc++.h>
using namespace std;
#define fre freopen("C:\\Users\\Dell\\Desktop\\in.txt", "r", stdin);
priority_queue<int, vector<int>, greater<int> >q; //小的先出队列
struct in
{
int d, s;//deadline,score
}c[1010];
bool cmp(in a, in b){
return a.d<b.d;
}
int main()
{
fre;
int T, n, i, j, t, cnt, ans;
scanf("%d", &T);
while (T--){
cnt = ans = 0;
t = 1;
while (!q.empty()) q.pop();
scanf("%d", &n);
for (i = 1; i <= n; i++) scanf("%d", &c[i].d);
for (i = 1; i <= n; i++) scanf("%d", &c[i].s);
sort(c + 1, c + n + 1, cmp);
for (i = 1; i <= n; i++){
//放入从小到大排序的队列,等之后没时间做分值大的作业时,从队头(分值小的作业)开始放弃分数小的作业
q.push(c[i].s);
//如果截止日期相同,也即某一天有不止一门课要交,则一定要从中选择一门放弃,选代价最小的,但是并未决
//定当天要做哪门
if (c[i].d>=t) t++;
else {
ans += q.top(); q.pop();
}
}
printf("%d\n", ans);
}
return 0;
}
# Doing homework again(贪心)的更多相关文章
- HDU 1789 Doing Homework again(贪心)
Doing Homework again 这只是一道简单的贪心,但想不到的话,真的好难,我就想不到,最后还是看的题解 [题目链接]Doing Homework again [题目类型]贪心 & ...
- hdu--1798--Doing Homework again(贪心)
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- hdu 1789 Doing HomeWork Again (贪心算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 /*Doing Homework again Time Limit: 1000/1000 MS ...
- HDU 1789 - Doing Homework again - [贪心+优先队列]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- HDOJ.1789 Doing Homework again (贪心)
Doing Homework again 点我挑战题目 题意分析 给出n组数据,每组数据中有每份作业的deadline和score,如果不能按期完成,则要扣相应score,求每组数据最少扣除的scor ...
- I - Doing Homework again(贪心)
I - Doing Homework again Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- HDU_1789_doing homework again_贪心
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- hdu1789 Doing Homework again(贪心+排序)
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU-1789 Doing Homework again 贪心问题 有时间限制的最小化惩罚问题
题目链接:https://cn.vjudge.net/problem/HDU-1789 题意 小明有一大堆作业没写,且做一个作业就要花一天时间 给出所有作业的时间限制,和不写作业后要扣的分数 问如何安 ...
- 【HDOJ6343】Graph Theory Homework(贪心)
题意: 给定n个点,每个点有权值a[i],从A走到B的花费是下取整sqrt(a[i]-a[j]),求从1号点走到n号点的最小花费 1<=n,a[i]<=1e5 思路: #include&l ...
随机推荐
- 【一起学源码-微服务】Nexflix Eureka 源码二:EurekaServer启动之配置文件加载以及面向接口的配置项读取
前言 上篇文章已经介绍了 为何要读netflix eureka源码了,这里就不再概述,下面开始正式源码解读的内容. 如若转载 请标明来源:一枝花算不算浪漫 代码总览 还记得上文中,我们通过web.xm ...
- 怎样求控制器的增益系数k?
步骤: 1. \dot x =A*x + B*u is a state space model, with A and B are known. Now we want to locate the ...
- JIRA备份,数据迁移以及小问题
Jira的备份(切记将许可证号备份) Jira默认会打开自动备份的功能,备份路径为/var/atlassian/application-data/jira/export 管理员账号登录Jira,点击右 ...
- hadoop+zookeeper+hbase伪分布式安装
基本安装步骤 安装包下载 从大数据组件下载地址下载以下组件安装包 hadoop-2.6.0-cdh5.6.0.tar.gz hbase-1.0.0-cdh5.6.0.tar.gz zookeeper- ...
- [CSP-S模拟测试]:装饰(数学)
题目传送门(内部题147) 输入格式 每个测试点第一行一个正整数$T$,表示该测试点内的数据组数. 接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示. 输出格式 对每组数据输出一行一个 ...
- AIDL 的工作原理
当创建AIDL文件并Clean Project 代码后,会生成相应的Java文件: 先来一段伪代码:类整体结构 /* * This file is auto-generated. DO NOT MOD ...
- Python 之类与对象及继承
类与对象 学习类的语法 关键字 class 类别,分类class 类名:属性特性特征类名的编写规范:首字母大写 驼峰命令 见名知意--->遵守规范.Math StudentInfoclass S ...
- 在Ubuntu 16.04配置VNC Server (灰屏问题解决)
使用命令安装 sudo apt install xfce4 xfce4-goodies tightvncserver 编辑vnc启动文件,安全期间最好备份一下 mv ~/.vnc/xstartup ...
- Python中循环及判断语句
循环判断条件是编程语言中一个很重要的部分,python也不例外,循环判断条件一般结合continue,return,break关键字来判断,这些关键字用法与java中基本一致 一.if判断语句 判断条 ...
- VisualVM通过ssl远程连接JVM
VisualVM通过密码连接JVM实例如下 https://www.cnblogs.com/qq931399960/p/10960573.html 虽然设置了密码,但还是不够安全,只要获取到密码,在任 ...