作业扣最少的分(要选好贪心目标)
实验目的:
练习贪心
实验内容:
小v上学,老师布置了n个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间及其逾期的扣分。请给出小v做作业的顺序,以便扣最少的分数。
输入描述:输入包括多个测试用例。每个测试用例的第一行为正数n(1≤n≤100),表示作业数,第二行包括n个整数,表示每个作业最后提交时间(天),第三行包括n个整数,表示每个作业逾期的扣分。以输入n=0结束。
输出描述:每个测试用例对应两行输出,第一行为做作业的顺序(作业编号之间用空格分隔),第二行为最少的扣分。
输入样例:
3 //三个作业
1 3 1 //最后提交时间
6 2 3 //逾期扣分
样例输出:
1 2
3
思路:
首先,结构体记录作业,包括编号,deadline,扣分。
对数据进行升序排序,越靠后的数据,扣分越高,优先级越高,越应该先做,扣分相同时,按提交时间递减排序,分数不同时递增排序。
设置一个flag数组,初始为0,记录每个时间片有没有作业在做,有的话记录该作业的编号。
按优先级顺序,从当前要做的任务的deadline往前做,遇到第一个空闲的时间片就占坑(deadline第一生产力,扣分越多的越要做,能拖多晚拖多晚 ),flag就记录该作业的序号。
最后顺序遍历flag,非空就输出其中的作业编号,这就是做作业的顺序。
代码
#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>using namespace std;
#define MAXN 1005struct homework {int no;int deadline;int score;bool operator < (const homework t) const { //重载< ,扣分相同时,按提交时间递减排序if (score == t.score) return this->deadline > t.deadline;else return this->score < t.score; //分数不同时递增排序}
};homework H[MAXN];
int flag[MAXN] = {0}; //记录该时段是否已有作业在做,0就是空,有就存该作业编号int findans(int n) {int i, j;int ans = 0;for (i = n-1; i >= 0; i--) { //从最后一个(扣分最多的作业)开始做for (j = H[i].deadline; j > 0; j--) { //对照deadline,deadline前的第一个空闲做该任务if (!flag[j]) {flag[j] = H[i].no;break;}}if (j == 0) ans += H[i].score;}return ans;
}int main()
{int n, time, ans;cin >> n;while (n != 0){for (int i = 0; i < n; i++) {H[i].no = i+1;cin >> H[i].deadline;} for (int i = 0; i < n; i++)cin >> H[i].score; // 读入数据sort(H, H + n); // 对数据进行升序排序,越靠后的数据,扣分越高,越应该先做int res = findans(n);for (int i = 0; i < MAXN; i++) //按时间做作业顺序输出作业编号if(flag[i]) cout << flag[i]<<' ';cout << '\n' << res << endl;fill(flag, flag + MAXN, 0); //重置flagcin >> n;}return 0;
}
结果
样例,做任务1,2,扣作业3的分
四个作业deadline都是1,做作业3,这样扣分最小
作业3扣分最多,作业2其次,依次做这两个,总扣分最小
作业1,2扣分最多,虽然都还没到deadline,但先做扣分多的这样才能使结果最小,所以贪心的时候要按扣分来贪心,如果按时间就错了。
总结:
贪心时要选取好要贪什么,像本题就要贪扣分,扣分多的一定要做,而且一定要拖到deadline前做,给其他作业留出空闲。
另外学习了重载函数。
作业扣最少的分(要选好贪心目标)相关推荐
- 淘宝怎么选品技巧秘籍,做淘宝7分靠选货品
淘宝怎么选品技巧秘籍,做淘宝7分靠选货品#电商#电商创业#电商运营 做淘宝, 7 分靠选品, 3 分靠运营.视频一定能够缓解你现在缺产品,还不知道选产品的苦恼.通过跨平台选品,能够找到一些利润又高,同 ...
- 跨境电商亚马逊核心要求“七分靠选品,三分靠运营”
亚马逊运营的核心要求: 产品为王 亚马逊电商时间越长会越觉得产品为王"是非常正确的,亚马逊电商电商圈流行着一句话"七分靠选品,三分靠运营",做电商最核心的四个要素:选品, ...
- 【蓝桥杯05】:小明每天都要练功,练功中的重要—项是梅花桩。小明练功的梅花桩排列成n行m列,相邻两行的距离为1,相邻两列的距离也为;小明想知道,在不掉下梅花桩的情况下,自己最少要多少步可以移动到目标。
问题描述: 小明每天都要练功,练功中的重要一项是梅花桩. 小明练功的梅花桩排列成n行m列,相邻两行的距离为1,相邻两列的距离也为1. 小明站在第1行第1列上,他要走到第 ...
- 北航数理统计大作业_数学146分上岸复旦大学大数据学院统计学,备考经验分享!...
先说一下我的基础,英语水平一直还行,考过一次六级568分,但可能因此没有重视英语最后还是不高:数学是大学一直就没怎么听课学不明白,线代基础几乎全忘光了,就是Ax=b有解条件都不知道的程度: 专业课有一 ...
- 一台电脑怎么接两个显示器_电脑数码类目显示器 篇二:11.11抄作业,个人消费级显示器怎么选--20款好价显示器推荐_显示器...
2020-11-09 21:56:2572点赞390收藏91评论 想攒一台电竞主机.家用主机.酷炫主机无从下手?想省钱又怕性能不达标?值得买帮你打造定制化DIY装机工具,自助全网比价装机,提供最适合的 ...
- 600分理科选计算机专业,天津600分左右,计算机或电子信息专业,怎么选院校?...
原标题:天津600分左右,计算机或电子信息专业,怎么选院校? 想学计算机或电子信息,一定是偏理选科对吧!所谓的换算,是指的高考后出了全天津市不分文理的总排名后,如何换算成相当于天津市往届如19年理科排 ...
- 大工17春 c 语言,大工20春《C/C++语言程序设计》在线作业【答案100分】
大工20春<C/C++语言程序设计>在线作业1 共20道题 总分:100分 答题中 单选题 判断题 一.单选题 共10题,50分 1 5分 一个函数功能不太复杂,但要求被频繁调用,则应把它 ...
- oracle数据库作业1,北京语言20秋《Oracle数据库开发》作业1(100分)
-[北京语言大学]20秋<Oracle数据库开发>作业1 试卷总分:100 得分:100 第1题,Orcacle提供了(),用于支持采用向导方式创建数据库. A.SQL*Plus B ...
- 团队博客作业-团队个人贡献分分配规则
每个团队开一个讨论会,协商讨论团队贡献分的分配方式.每个团队的团队贡献分为50分/人.分数为自然数,并且每个人分数不能相同,所有人分数的总和为50*N,其中N为团队的人数.请详细说明分数的分配规则. ...
最新文章
- 飞桨博士会第三期来啦!中国深度学习技术俱乐部诚邀您加入
- 指定域的名称或安全标识(SID)与该域的信任信息不一致
- SSL、SSH、OpenSSH、OpenSSL 区别
- python测试之道第5章模拟网络请求
- 巧用参数组件和过滤组件,教你快速定位目标数据
- 【5分钟搞定】如何将py打包成exe可执行文件
- 【MVC】ASP.NET MVC5 使用MiniProfiler 监控MVC性能
- cocos2d-x 调色
- 分块编码(Transfer-Encoding:chunked)
- Linux 图片传输功能c/c++(初版)
- valhalla 插件_Valhalla项目的价值
- 台式机电脑配置单_2020年电脑配置单重点硬件参考
- sudo: sorry, you must have a tty to run sudo
- cmd windows 命令sleep_最实在的9个黑客命令!确定不学习下?
- 非广告--推荐Dynatrace:树立数字化性能管理DPM标杆
- uniapp scroll-view组件横向滚动不生效
- 按头安利 好看又实用的SolidEdge 3d模型素材看这里
- 使用逐浪CMS做网站如何引用Markdown编辑器
- LENOVO的Y430P笔记本无线网卡BCM43142在ubuntu 14.04系统WIF上网不稳定
- 使用ZAP寻找敏感文件和目录