hdu1789简单贪心Doing Homework again

**Doing Homework again
Problem 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

这个题目大佬说几分钟就做出了了,本蒻蒟花了3个多小时,还参考了一下别人的代码,唉丢人。说一下这题把,我一开始是用分数/天数降序的,发现这样并不能达到最优值,因为天数我没有考虑到位,在生活中,我们当然是希望尽可能在最后一天做那门课程的作业,这样在交作业之前可以把前面的作业先做了,那么做作业的原则啊,先做高数最高的,如果分数相同就做时间最短的,按照这个思路就可以把代码写出来了。
个人代码(c++)//参考了别人的数组用来记录最后一天我要做的课程

#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
struct time{
	double a;//最后的期限 
	double b;//扣的分数 
};
bool cmp(struct time a,struct time b){
	if(a.b==b.b)
	return a.a<a.b;
	return a.b>b.b; 
}
struct time a[1005];
int limit[1005];
int main()
{
	int t;
	while(cin>>t){
		for(int p=0;p<t;p++){
			memset(a,0,sizeof(a));
			memset(limit,0,sizeof(limit));
			int q;//科目 
			cin>>q;
			for(int i=0;i<q;i++){
				cin>>a[i].a;
			}
			for(int i=0;i<q;i++){
				cin>>a[i].b;
			}
			int sum=0,t=0;
			sort(a,a+q,cmp);
		//	for(int i=0;i<q;i++){
		//		cout<<a[i].a<<"  "<<a[i].b<<endl;
		//	}
			for(int i=0;i<q;i++){
				t=a[i].a;
					while(t){
						if(!limit[t]){//表示第t天还没有做过作业 
							limit[t]=1;//表示第t天我要做这门作业,这天已经被占用了 
							 break;
						}else{
							t--;
						}
						if(t==0){
							sum+=a[i].b;
						}
					}
			}
			cout<<sum<<endl;
		}
	}
} 
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# AI面会问哪些问题? #
24847次浏览 491人参与
# 中国电信笔试 #
31080次浏览 283人参与
# 米连集团26产品管培生项目 #
12951次浏览 285人参与
# 你的实习产出是真实的还是包装的? #
18817次浏览 330人参与
# 如果秋招能重来,我会____ #
96691次浏览 500人参与
# 春招至今,你的战绩如何? #
59982次浏览 543人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
14147次浏览 209人参与
# i人适合做什么工作 #
36914次浏览 124人参与
# 我是面试官,请用一句话让我破防 #
79511次浏览 219人参与
# 哪些公司真双非友好? #
69200次浏览 287人参与
# 金三银四,你的春招进行到哪个阶段了? #
21567次浏览 277人参与
# 找AI工作可以去哪些公司? #
7673次浏览 186人参与
# 从事AI岗需要掌握哪些技术栈? #
7676次浏览 251人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
339915次浏览 2165人参与
# 面试尴尬现场 #
220755次浏览 861人参与
# 五一之后,实习真的很难找吗? #
102797次浏览 584人参与
# 你做过最难的笔试是哪家公司 #
30108次浏览 193人参与
# 你小时候最想从事什么职业 #
159840次浏览 2072人参与
# 应届生第一份工资要多少合适 #
20483次浏览 84人参与
# 阿里笔试 #
176460次浏览 1302人参与
# 一张图晒出你司的标语 #
3821次浏览 72人参与
# 面试被问期望薪资时该如何回答 #
382459次浏览 2163人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务