Doing Homework again

点我挑战题目

题意分析

给出n组数据,每组数据中有每份作业的deadline和score,如果不能按期完成,则要扣相应score,求每组数据最少扣除的score是多少。

典型的贪心策略。

既然是要求最少的扣分,那么肯定是要先完成分数最多的。所以可以推出按照分数排序。那么最佳策略应该是在deadline当天完成作业,如果那天已经占用,只能在deadline-1天完成,如果那天也被占用了,就只能在deadline-2天完成……直到推到第1天,如果还被占用的话,那么这个作业肯定是完不成了,扣除相应分数。遍历完数据,判断有哪些作业没有完成,输出其分数之和即可。

代码总览

/*
Title: HDOJ.1789
Author: pengwill
Date:2016-11-22
*/
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct hw{
int dline;
int score;
bool fish;
}item[1005];
bool judge[1005];
int cmp(hw a, hw b)
{
return a.score > b.score;
}
int main()
{
int n;
scanf("%d",&n);
while(n--){
memset(judge,0,sizeof(judge));
memset(item,0,sizeof(item));
int i,t,j;
scanf("%d",&t);
for(i = 0;i<t;i++){
scanf("%d",&item[i].dline);
}
for(i = 0;i<t;i++){
scanf("%d",&item[i].score);
item[i].fish = false;
}
sort(item,item+t,cmp);
for(i = 0;i<t;i++){
for(j = item[i].dline;j>=1;j--){
if(!judge[j]){
judge[j] = true;
item[i].fish = true;
break;
}
}
}
int ret = 0;
for(i = 0;i<t;i++){
if(item[i].fish == false){
ret += item[i].score;
}
}
printf("%d\n",ret);
}
return 0;
}

最新文章

  1. safari 浏览器window.history.go(-1)运行无效解决办法
  2. mybatic与spring结合的事务管理
  3. C++之路进阶codevs1269(匈牙利游戏)
  4. ubuntu访问supermicro ikvm
  5. 这世上倒底有没有神仙——说“Excel不是数据库,是不是犯了白马非马论的错误??
  6. 显示Servlet API主要版本,次要版本以及服务器系统信息
  7. Java用DOM操作xml
  8. (转载)PHP删除数组中的特定元素的代码
  9. 设计模式--代理模式(C++版)
  10. 【原创】POI 生成Excel文件并下载
  11. Java连接数据库之SQLServer
  12. 第一个Eureka程序,Eureka Client的自启动原理和简要过程
  13. 【转】微信公众号h5网页被嵌入广告 不知道什么原因
  14. ISO 8895-1
  15. 1分钟入门接口自动化框架Karate
  16. Linux内核剖析 之 内存管理
  17. CentOS怎样安装Python3.6
  18. HTTP传输数据压缩
  19. boa 服务的启动
  20. P1857 质数取石子 (DP,递推)

热门文章

  1. java 多维数组转化为字符串
  2. selenium--driver.switchTo()
  3. TPO-13 C2 How to use language lab
  4. Siki_Unity_1-1_Unity零基础入门_打砖块
  5. 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
  6. [CH0304]IncDec Sequence
  7. 基于freeRTOS定时器实现闹钟(定时)任务
  8. IntelliJ IDEA for MAC 注释模板、快捷键生成注释
  9. node.js应用--转载
  10. css修改placeholder的样式