Doing Homework again(hdu1789,贪心)
来源:互联网 发布:麒麟970和高通835知乎 编辑:程序博客网 时间:2024/05/04 15:42
http://acm.hdu.edu.cn/showproblem.php?pid=1789
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=29256#problem/A
A - Doing Homework again
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit
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
解析:
题意:老师布置n种作业,每种作业都有相应的上交期限,如果迟完成的话要扣掉相应的分数。规定每天只能做一种作业,问如何安排是的扣分最少
思路:
贪心法;
既然目的是使得扣分最少,那么就以分数作为优先考虑条件
1.排序,将分数高的排在前面,分数相同再按时间低高的优先
2.枚举每种作业,让它在靠近期限内完成,并把当天标记,如果在期限时间都被占用了话,则说明不能完成改作业。
336 KB 31 ms C++ 828 B
*/
#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#include<algorithm>#include <iostream>using namespace std;const int maxn=1000+10;int used[maxn];struct node{int d;int s;}p[maxn];bool cmp(node a,node b){return a.s>b.s||(a.s==b.s&&a.d>b.d);//按照分数优先}int max(int a,int b){return a>b ? a:b;}int main(){int T,i,j,n,ans; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i=1;i<=n;i++) {scanf("%d",&p[i].d); } for(i=1;i<=n;i++) { scanf("%d",&p[i].s); } sort(p+1,p+1+n,cmp); memset(used,0,sizeof(used)); //for(i=1;i<=n;i++) //printf("d==%d,s=%d\n",p[i].d,p[i].s); ans=0; for(i=1;i<=n;i++) { for(j=p[i].d;j>0;j--)//判断可用的空间是否被占用 { if(used[j]==0)//选择最近日期 {used[j]=1; break; } } if(j==0)//如果都被占用则不能完成 ans+=p[i].s; } printf("%d\n",ans); } system("pause");return 0;}
- Doing Homework again(hdu1789,贪心)
- hdu1789 sdut2076 Doing Homework again(贪心)
- HDU1789--Doing Homework again(贪心)
- hdu1789 Doing Homework again(贪心)
- HDU1789 Doing Homework again 贪心
- 【贪心】 hdu1789 Doing Homework again
- hdu1789 Doing Homework again (贪心)
- HDU1789 Doing Homework again 【贪心】
- hdu1789(Doing Homework again 贪心)
- [HDU1789]Doing Homework again[贪心]
- HDU1789:Doing Homework again 【贪心】
- HDU1789 Doing Homework again(贪心)
- HDU1789 doing homework again(贪心)
- HDU1789 Doing Homework again 贪心
- hdu1789 Doing Homework again (贪心)
- HDU1789 Doing Homework again(贪心)
- HDU1789-Doing Homework again-贪心
- hdu1789——Doing Homework again(贪心)
- Sum(poj1844,简单枚举)
- c++学习之优先队列(priority_queue)
- mysql 如何获取数据库当前时间
- 常用数据库的驱动程序及JDBC URL
- 《JAVA与模式》之模板方法模式
- Doing Homework again(hdu1789,贪心)
- Spring在ssh框架运用中的事务部分详解(2)
- jquery实现 checkbox全选和反选 很常用噢....
- 使用Windbg调试内核
- OSI TCP/IP 模型
- A Walk Through the Forest(hdu1142,最短路+dfs)
- aspnetdb表结构
- DHCP Option60
- SPFILE 错误导致数据库无法启动(ORA-01565)