UVA 11269 Setting Problems
2016-07-15 09:56
375 查看
题意:
有S和G两个人、n个任务,对于每个任务S必须先完成G才能做,问如何安排任务使总时间最少。
思路:
n简单的贪心题
n有两个人S和G要去做n个任务,对于某个任务,S要先做完G才能做这个任务,也就是说S做任务是无约束的n这里的 ,n<=25,那么我们能用最笨的方法来做这一题,对于第1个任务来说,我们该如何选择呢?很简单,对于第1个任务(设为a任务)来说,它应该排在其他任务之前,也就是说做完这个a任务之后再做其他的某一任务(设为b任务)比做其他的某一b任务之后再做这个a 任务的时间更短,即有a.S+max(a.G,b.S)+b.G<b.S+max(b.G,a.S)+a.G也就是将每个任务都和其他任务进行比较,像排序一样将它们按顺序排好,然后依次取任务计算时间就好了。
有S和G两个人、n个任务,对于每个任务S必须先完成G才能做,问如何安排任务使总时间最少。
思路:
n简单的贪心题
n有两个人S和G要去做n个任务,对于某个任务,S要先做完G才能做这个任务,也就是说S做任务是无约束的n这里的 ,n<=25,那么我们能用最笨的方法来做这一题,对于第1个任务来说,我们该如何选择呢?很简单,对于第1个任务(设为a任务)来说,它应该排在其他任务之前,也就是说做完这个a任务之后再做其他的某一任务(设为b任务)比做其他的某一b任务之后再做这个a 任务的时间更短,即有a.S+max(a.G,b.S)+b.G<b.S+max(b.G,a.S)+a.G也就是将每个任务都和其他任务进行比较,像排序一样将它们按顺序排好,然后依次取任务计算时间就好了。
#include<cstdio> #include<algorithm> using namespace std; const int MAX=25; struct Text{ int G,S; }t[MAX]; bool cmp(Text a,Text b){ //return a.G>b.G; return a.S+max(a.G,b.S)+b.G<b.S+max(b.G,a.S)+a.G; } int main(){ int n; while(~scanf("%d",&n)){ for(int i=1;i<=n;i++){ scanf("%d",&t[i].S); } for(int i=1;i<=n;i++){ scanf("%d",&t[i].G); } sort(t+1,t+1+n,cmp); int s=0; int ans=0; for(int i=1;i<=n;i++){ s+=t[i].S;//等前一个执行完毕后即ans时间后,再执行下一个,较ans和开始时间s if(ans<=s) ans=s+t[i].G;//若ans<=s,则ans=s+t[i].G else ans+=t[i].G;//若ans>s,则ans=ans+t[i].G } printf("%d\n",ans); } return 0; }
相关文章推荐
- 使用DOM4J方式解析XML
- 关于 wamp apache 的虚拟机配置多域名访问的解决方法
- 2016.7.14 去掉Mybatis Generator生成的一堆 example
- 下单菜单源码分析-司徒正美
- iOS 语音
- java编程中字节流转换成字符流
- android获取状态栏高度
- iOS开发之把数组中的元素进行随机排序、随机数产生的几种方法
- hdu 4358(莫队算法+dfs序列)
- 基于openfire+spark+smack
- 删除配置文件解决OS X各种WiFi无法连接的顽固问题
- Manifest.json文档说明 manifest配置
- Android经典面试题
- Android基础--application和activity里面的label
- Struts2 中的配置文件 package name 、namespace 以及 对象方法调用
- JavaScript学习笔记二十:标准对象-JSON
- 把C++类成员方法直接作为线程回调函数
- leetcode_279. Perfect Squares
- [Office] 一些实用且简单的Excel函数
- AFURLSessionManager 上传下载使用