HDU1789 Doing Homework again
来源:互联网 发布:手机淘宝推广软件 编辑:程序博客网 时间:2024/05/17 01:34
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1789
这道题的大概意思就是Ignatius要完成N项作业,并且给出了N项作业的提交时间,以及超过提交时间后所要扣的分数。并且题目给出了每一项作业需要一天完成。
这道题的思路比较简单,用贪心算法来解。给N项作业按分数从大到小排序,如果分数相等的情况下,则是把日期小的放在前面。这样我们优先完成分数大的,就符合了每次的最优选择。因此,我们需要设置一个用来记录每个任务的完成时间的数组 do_work[MAXN]。每次首先判断该任务的提交时间x是否在标记数组中存在,若不存在则直接do_work[x]=1。 若存在,则从x-1天开始,每次向前推进1天,知道找到没用来做作业的那天为止。(这里记得一定要从x-1天开始,向前推进,而不能从1开始,向x-1前进。后者不符合最优选择。在这里WA了好几次。)
这道题关于作业提交时间的范围没有给出来。但是MAXN=1005是可以AC的。
下面是仅供参考的代码:
#include <iostream>#include <algorithm>#include <cstring>using namespace std;#define MAXN 1005struct subjects{ int day,score;}work[MAXN];int do_work[MAXN];bool cmp(subjects const &A,subjects const &B){ return (A.score>B.score)||(A.score==B.score&&A.day<B.day);}int main(){ int t,n; cin>>t; while(t--) { cin>>n; memset(do_work,0,sizeof(do_work)); for(int i=0;i<n;i++) cin>>work[i].day; for(int i=0;i<n;i++) cin>>work[i].score; sort(work,work+n,cmp); int i,j,ans=0; for(i=0;i<n;i++) { if(!do_work[work[i].day]) do_work[work[i].day]=1; else { //这里一定要是从后往前,才符合最优选择。 for(j=work[i].day;j>=1;j--) { if(!do_work[j]) break; } if(j>0) do_work[j]=1; else ans+=work[i].score; } } cout<<ans<<endl; } return 0;}
0 0
- 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 【贪心】
- hdu1789(Doing Homework again 贪心)
- [HDU1789]Doing Homework again[贪心]
- Android程序员读过andrid API的最好证明(2) 原创 KankanStyle
- 考研日记----9.08-----中秋快乐
- Excel下拉项生成设置
- SQL 服务器不能访问
- Leetcode: Maximum Subarray
- HDU1789 Doing Homework again
- 【VC】typedef struct 和 struct 的区别
- winDbg+VirtualBox双机调试
- 揭秘优化php代码42种方法_PHP教程
- Nginx 禁止IP访问 (实践过)
- 10-2014.9.9
- Kernel Debugging Using Kprobe and Jprobe
- "the connection to adb is down and a severe error has occurred. you must restart adb and eclipse" 处理
- 艺欧装饰您的未来不是梦