博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1789 Doing Homework again
阅读量:6225 次
发布时间:2019-06-21

本文共 1583 字,大约阅读时间需要 5 分钟。

  题目链接:

  本题的目的是制定一个写作业的顺序,使得最后被扣的分数最少,最后输出最少的扣分数。要想扣分少,就必须优先考虑分值大的家庭作业。因此采用贪心策略比较合适,优先将分值大的作业先做完,剩下做不完的作业加起来自然是最小的。这里的做法是先按照家庭作业的分值大小进行降序排序,然后遍历在决策哪天做哪门作业。

1 #include 
2 #include
3 #include
4 using namespace std; 5 #define N 1005 6 //标志数组,表示第i天有是否处于空闲状态 7 bool flag[N]; 8 //定义homework结构体 9 struct task{10 //d 截止日期11 //s 分值12 //isdone 有没有被完成 13 int d,s;14 bool isdone;15 };16 //存储 家庭作业 17 task T[N];18 bool DESC(task t1,task t2){19 return t1.s>t2.s;20 }21 int main(){22 int n;23 cin>>n;24 while(n--){25 //将flag数组重置 26 memset(flag,false,sizeof(flag));27 int m=0;28 cin>>m;29 //将homework存入数据结构中 30 for(int i=1;i<=m;i++){31 cin>>T[i].d;32 T[i].isdone=false;33 }34 for(int i=1;i<=m;i++)35 cin>>T[i].s;36 //按照作业的分值大小降序排序 37 sort(T+1,T+m+1,DESC);38 //贪心算法 39 //优先考虑分值大的家庭作业40 //如果截止日期那天没有要做的作业,则将该作业计划在那天做41 //否则从截止日期往前推,直到发现空闲的一天 42 for(int i=1;i<=m;i++){43 for(int j=T[i].d;j>0;j--)44 if(flag[j]==false){45 flag[j]=true;46 T[i].isdone=true;47 break;48 }49 }50 //计算未完成的作业所造成的扣分值 51 int result=0;52 for(int i=m;i>0;i--){53 if(T[i].isdone==false)54 result+=T[i].s;55 }56 cout<
<

 

转载于:https://www.cnblogs.com/vmoor2016/p/6611200.html

你可能感兴趣的文章
扁平化设计2.0
查看>>
codevs1116
查看>>
聊聊Dubbo(三):架构原理
查看>>
tizen镜像制作
查看>>
Vue表单输入绑定
查看>>
团体程序设计天梯赛-练习集
查看>>
bootstrap使用后一个小bug---不知道大家碰到没
查看>>
Android训练课程(Android Training) - 添加活动栏(使用action bar)
查看>>
Unable to resolve target 'android-18'
查看>>
模拟键盘按键
查看>>
angularJS内置指令一览
查看>>
Redis的管理
查看>>
数字电路建模 - jchdl
查看>>
Tomcat6.x+jndi配置
查看>>
SDWebImage
查看>>
全同态加密算法
查看>>
搭建hexo博客
查看>>
shell编程(一)基础
查看>>
图的着色问题
查看>>
( 转)UVM验证方法学之一验证平台
查看>>