题目链接:https://cn.vjudge.net/problem/HDU-1789

题意

小明有一大堆作业没写,且做一个作业就要花一天时间

给出所有作业的时间限制,和不写作业后要扣的分数

问如何安排作业,使被扣分最少

思路

因为有日期这个规定,所以可以提前写作业

有一个思路,复杂度是O(n^2)

就是先算得n天内的最小扣分的安排,然后在n+1天时用第n+1天期限的作业更新一边最小扣分安排

考虑时间1000ms规模1000个数据,O(n^2)太冒险,所以考虑贪心

贪心思路O(n)

为了让扣分最少,那么首先按照分数由大到小排序

从头开始,贪心的把第n个作业拖到允许的最后一天做

如果最后一天有作业,那么就提前一天做(有点像hash表的解决冲突)

代码

#include <cstdio>
#include <algorithm>
using namespace std;
struct Work{
int date, score;
Work(int date=0, int score=0):
date(date),score(score) {}
bool operator < (const Work &a) const{
return score>a.score;
}
}; int main(void){
int T, n; scanf("%d", &T);
while (T--){
scanf("%d", &n);
Work works[1000+5];
for (int i=0; i<n; i++) scanf("%d", &works[i].date);
for (int i=0; i<n; i++) scanf("%d", &works[i].score);
sort(works, works+n); int vis[1000+5]={0}, sum=0;
for (int i=0; i<n; i++){
int date=(works[i].date<=1000)?works[i].date:1000;
while (date>=1 && vis[date]) date--;
if (date) vis[date]=1;
else sum+=works[i].score;
}printf("%d\n", sum);
} return 0;
}
Time Memory Length Lang Submitted
31ms 1516kB 834 G++ 2018-02-08 21:29:05

最新文章

  1. SpringMVC集成缓存框架Ehcache
  2. 技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
  3. 《ASP.NET MVC4 WEB编程》学习笔记------ViewBag、ViewData和TempData的使用和区别
  4. Web测试Selenium:如何选取元素
  5. Python-S13-day2-之购物车
  6. [转]change the linux startup logo
  7. source insight 的使用
  8. oracle13 触发器 变量
  9. IOS深入学习(12)之Archiving
  10. ASP.NET Core 源码学习之 Options[1]:Configure
  11. 使用vue实现tab操作
  12. Servlet--HttpServletRequest一些不常用的方法
  13. [Swift]LeetCode551. 学生出勤纪录 I | Student Attendance Record I
  14. 剑指Offer 61. 序列化二叉树 (二叉树)
  15. 纸上谈兵: AVL树[转]
  16. 学院派福利——C#+SQL Server图书管理系统
  17. 关系网络数据可视化:1. 关系网络图&amp;Gephi
  18. VS2012 安装番茄插件
  19. BOM简单总结
  20. Django框架----路由系统(详细)

热门文章

  1. MyLayer MyScene
  2. redis在项目中的使用(单机版、集群版)
  3. java中对象和对象引用的区别
  4. ASP.NET使用MergeInto做数据同步,同步SQLSERVER不同数据库的相同表结构的数据
  5. TP框架传值
  6. go语言简单的执行shell命令
  7. luogu P1375 小猫(卡特兰数)
  8. 05004_Linux的其他命令和权限命令
  9. ASP.NET-缓存outputcache参数
  10. [Javascript] Transduce over any Iteratable Collection