Doing Homework again

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce his score of the final test. And now we assume that doing everyone homework always takes one day. So Ignatius wants you to help him to arrange the order of doing homework to minimize the reduced score.
 

Input

The input contains several test cases. The first line of the input is a single integer T that is the number of test cases. T test cases follow. 
Each test case start with a positive integer N(1<=N<=1000) which indicate the number of homework.. Then 2 lines follow. The first line contains N integers that indicate the deadlines of the subjects, and the next line contains N integers that indicate the reduced scores. 
 

Output

For each test case, you should output the smallest total reduced score, one line per test case. 
 

Sample Input

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
 

Sample Output

0
3
5
 
 
题意:
  给出课程的deadline和超时所扣的分 做一个作业要一天 求出最少的扣分方案
 
错误思路:
  一开始想当然地 先对deadline按升序排序 再对相同deadline的按扣分多少按降序排序
  然后从头开始 当之后的数据deadline比已用天数小的时候 就+到sum里
  这个思路是不对的 我们从最后一组数据就能测试出他的问题 如果按这种思路
  排序后:1 2 3 4 4 4 6
      3 6 4 7 5 2 1
  那么我们做到第四个数据 之后的数据就全部都无法完成了 得出的结果是8
  但是这个case下的最优解其实是: 不做第一天的3和第四天的2 其他都可以完成 结果是5
 
正确思路:
  这里我用的是hash表的思路
  先按分数降序排列 然后从头开始加到时间表里
  表的4 放上数据7 意思是第四天完成7这个作业
  放5的时候冲突了 于是放到3 第三天完成5这个作业
  之后同理 如果无法放到表中 说明这个任务无法完成 加到sum里 
 
ac代码:
其中的判定value大小的地方有垃圾部分 因为已经按降序排列 所以插入的时候没有比其中数据小的情况 懒得删了
 #include <iostream>
using namespace std;
int work;
int sum=;
struct w
{
int dl;
int score;
}a[]; void sort(w *a)
{
for(int i=;i<work-;i++)
{
for(int j=i+;j<work;j++)
if(a[j].score>a[i].score)
{
w t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
void insert(int *timeset,int pos,int value)
{
if(timeset[pos]==)
timeset[pos]=value;
else if(timeset[pos]>value&&(pos-)>)
insert(timeset,pos-,value);
else if(timeset[pos]>value&&(pos-)<=)
sum+=value;
else if(timeset[pos]<=value)
{
int t=timeset[pos];
timeset[pos]=value;
if((pos-)>)
insert(timeset,pos-,t);
else
sum+=t;
}
}
int main()
{
int N;
cin>>N;
for(int n=;n<=N;n++)
{
sum=;
cin>>work;
int maxdl=;
for(int i=;i<work;i++)
{
cin>>a[i].dl;
if(maxdl<a[i].dl)
maxdl=a[i].dl;
}
for(int i=;i<work;i++)
cin>>a[i].score;
int *timeset=new int[maxdl+];
for(int i=;i<maxdl+;i++)
timeset[i]=; sort(a); for(int i=;i<work;i++)
insert(timeset,a[i].dl,a[i].score); cout<<sum<<endl;
}
return ;
}

解题报告 HDU1789 Doing Homework again的更多相关文章

  1. 【九度OJ】题目1433:FatMouse 解题报告

    [九度OJ]题目1433:FatMouse 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1433 题目描述: FatMouse pr ...

  2. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  3. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  4. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  5. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  6. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  7. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  8. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  9. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. MinGW gcc 生成动态链接库 dll 的一些问题汇总 (补充)

    我以前写过一个小短文,介绍MinGW gcc 生成动态链接库 dll 的一些问题.当时写的并不全面.近期又遇到写新的问题.这里记录一下,做个补充. 通常情况下,dll 中的函数假设採用 _stdcal ...

  2. 百度地图API 级别自动缩放

    今天做一个基于百度地图API的小项目 查了很长时间apid都没有找到地图呈现出来的时候地图按坐标的多少自动缩放显示的等级比例,特此记录笔记!var points = [point1, point2,p ...

  3. SQL Server索引进阶:第七级,过滤的索引

    原文地址: Stairway to SQL Server Indexes: Level 7,Filtered Indexes 本文是SQL Server索引进阶系列(Stairway to SQL S ...

  4. iOS面试题05-父子控制器、内存管理

    内存管理.父子控制器面试题 1.建立父子关系控制器有什么用 回答:1>监听屏幕选中 2>如果想拿到你当前的很小的一个控制器所在的导航控制器必须要跟外面比较大的控制器建立父子关系,才能一层一 ...

  5. SQL数据库的应用一(Day 24)

    哈哈,又到了新的一周.我们也开始学习新的知识了,从今天开始学习SQL数据库的一些知识.今天主要讲了一些数据库.表的创建管理,和一些约束的定义使用.(这里使用的是SQL语句)下面我就具体总结一下. 总结 ...

  6. ##DAY7 UINavigationController

    ##DAY7 UINavigationController #pragma mark ———————UINavigationController——————————— 概括: 导航视图控制器也是一个视 ...

  7. (转)经典线程同步 互斥量Mutex

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  8. Java中Calender引用类型

    某些时候需要使用深拷贝: Calendar startTime = (Calendar) this._paramModel.getStartTime().clone(); 这样对startTime.a ...

  9. ASP.NET MVC5 学习笔记-3 Model

    1. Model 1.1 添加一个模型 注意,添加属性时可以输入"prop",会自动输入代码段. public class CheckoutAccount { public int ...

  10. QT 判断当前焦点是否在某控件上(使用hasFocus函数,毕竟QT是DIRECTUI,所以这个Focus到底代表了什么呢?)

    ui->pushButtonhasFocus()->hasFocus(); ui->treeWidget->hasFocus();   http://blog.csdn.net ...