博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法之贪心算法篇
阅读量:6232 次
发布时间:2019-06-21

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

hdu1257

  题目刚开始理解错了,该题可以同时有几个拦截系统并行的。题目不算难。

#include
#include
#include
using namespace std;int main(){ int n; while(~scanf("%d",&n)) { int height; vector
v; for(int i=0;i
= height) { v[j] = height; break; } } if(j>=vsize) v.push_back(height); } printf("%d\n",v.size()); } return 0;}
View Code

 

hdu1789。

  题意:t组测试数据,n个作业,每个作业需要一天完成,接下两行表示n个最后交作业时间,n个对应作业分数。

如果作业没有在最后时间提交,将会扣掉对应作业分数,求最小扣分数。

  思路:声明ST st[n],其中st[i].d表示时间限制,st[i].s表示分数。先对数据st数组进行按作业分数从大到小sort。然后在申请一个temp数组,向里面填充数据。对st数组从0到n-1遍历,d=st[i].d,然后如果temp[d]不为0,则temp[d]=1;如果填充过(temp[d]==1) ,则d--循环填充,如果d==0,则表示该门课只能放弃了。

  

#include
#include
#include
#include
using namespace std;struct ST{ //d表示时间限制,s表示分数。 int d; int s;};bool Comp(ST s1,ST s2){ return s1.s > s2.s;}int main(){ int t;//测试组数 scanf("%d",&t); while(t--) { int n;//个数 scanf("%d",&n); ST st[n]; for(int i=0;i
0) { if(temp[d]==0) { temp[d] = 1; break; } --d; } if(d <= 0) res += st[i].s; } printf("%d\n",res); } return 0;}
View Code

 

hdu2111。

  这道题目是典型的贪心问题,很简单。刚开始的时候看成了0,1背包,后来发现是单价,不是总价==。

#include
#include
#include
#include
using namespace std;struct ST{ int pi; //单价 int mi; //容量};bool comp(ST s1,ST s2){ return s1.pi > s2.pi;}int main(){ int v; while(~scanf("%d",&v),v) { int n; //v代表容量,n代表种类 scanf("%d",&n); ST st[n]; for(int i=0;i
0;++i) { if(v>=st[i].mi) { v -= st[i].mi; res += st[i].mi*st[i].pi; } else { res += v*st[i].pi; v = 0; } } printf("%d\n",res); } return 0;}
View Code

 

hdu4296,此题感觉题意有问题,不想说。

#include
#include
#include
#include
using namespace std;//求木块之上的重量和减去该木板的强度的最小值。struct ST{ int w; //重量 int s; //强度};bool Comp(ST s1,ST s2){ return s1.w + s1.s < s2.w + s2.s;}int main(){ int n; while(~scanf("%d",&n)) { ST st[n]; for(int i=0;i
View Code

 

hdu4864,题目挺难的,看了网上的解题思路才做出来的。是贪心加hash法,没有hash法容易超时。

  题目是机器人n,任务数m,每个机器人只能做一个任务,机器人与任务都有x,y值,x表示时间,y表示等级。

只有当机器人的mac.x >= task.x 和 mac.y >= task.y都满足时,才表示该任务能被完成。完成任务后的收益是500*x + 2*y;求最大完成任务数与最大收益。

  

#include
#include
#include
#include
using namespace std;struct ST{ int x; //时间 int y; //等级 int getRes(){
return 500*x + 2*y;}};bool cmp(ST st1,ST st2){ if(st1.x != st2.x) return st1.x > st2.x; return st1.y > st2.y;}int main(){ int n,m; //机器人数,任务数 while(~scanf("%d%d",&n,&m)) { ST mac[n],task[m]; for(int i=0;i
= task[i].x) ++Hash[mac[j++].y]; for(int k=task[i].y;k<=100;++k) { if(Hash[k]) { --Hash[k]; sum += task[i].getRes(); ++cnt; break; } } } printf("%d %I64d\n",cnt,sum); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/jlyg/p/6672338.html

你可能感兴趣的文章
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
微软豪购Linkedin 补移动社交船票?
查看>>
实例:某大型企业遭受勒索蠕虫袭击纪实
查看>>
“云计算”让城市智慧起来
查看>>
Google计划收购数据科学社区Kaggle
查看>>
《OpenGL ES应用开发实践指南:Android卷》—— 1.3 初始化OpenGL
查看>>
Java 生成 PDF 文档
查看>>
C语言实现栈的基本操作
查看>>
策略模式
查看>>
linux(6.8版本最小化安装)安装nginx实战
查看>>
我的友情链接
查看>>
检讨~
查看>>
html引用公共的html文件
查看>>
关于Java泛型使用的问题记录
查看>>
进入Android Dalvik虚拟机之Dalvik虚拟机的特点
查看>>
while的四种使用方式
查看>>
nginx添加几十个域名
查看>>
SpringMVC同时支持多视图(JSP,Velocity,Freemarker等)的一种思路实现
查看>>
致初入模板创作:了解各种浏览器真正的核心,测试模板兼容时就不用开这么多浏览器...
查看>>
我的友情链接
查看>>