SGU 259 单机调度问题 +贪心 及此题解法的证明

来源:互联网 发布:淘宝小也旗舰店靠谱吗 编辑:程序博客网 时间:2024/05/18 00:27

转自:http://blog.csdn.net/oceanlight/article/details/7862104

259. Printed PR

time limit per test: 0.5 sec.
memory limit per test: 65536 KB
input: standard
output: standard
Small PR-agency got an order to print a very big lot of agitational materials. Agency should print and deliver N leaflets. Agency is very small and has only one printer, but it can print any leaflet. Leaflets can be different, so it is possible that times of printing of leaflets will differ. To print i-th leaflet the printer needs Ti minutes. When leaflet is printed, it should be immediately delivered to its addressee. The agency has unlimited number of couriers, so the courier gets the leaflet as soon as it printed and goes to the addressee. It takes Li minutes to deliver i-th leaflet. You were hired by agency to calculate the minimal time required to finish the job (this is an interval of time from the beginning of printing to the moment when the last leaflet is delivered), considering that the leaflets can be printed in any order.

Input
The first line contains a number of leaflets - integer number N (1 <= N <= 100). The second line contains N integer numbers Ti (1 <= i <= N). Third line contains N integer numbers Li (1 <= i <= N). You can assume that 1 <= Ti, Li <= 1000.

Output
You should output only one number - the answer for the problem.

Sample test(s)

Input
2 2 1 2 1

Output
4
单机调度问题是 : 假设 有一台机器以及在这个机器上完成的N个作业a1,a2 ,a3........an,已知处理作业aj所需的时间为tj,作业aj收益为pj,作业aj完成的最后期限为dj。机器在一个时刻只能处理一个作业。如果某作业aj在最后期限dj之前完成,则获得收益pj,若在最后期限之前没有完成,则没有收益。
 
 
声明 此题是个水题。。
这个题的题意是 有一台打印机 要打印N种leaflet(传单),并要送到接收人那里 。 而送leaflet 的人是无上限的 但只有一个打印机。。。。。
已知 打印每种leaflet 的时间 Ti , 送达接受人哪里 要 Li  , 求从开始打印到送完的最短时间。
 
解法 : 首先按照递送的时间 Li 排序 ,然后把所有的leaflet 遍历一遍 ,贪心就可求出最优解。
sum = T1+T2+...+Ti。前i个leaflet 的打印所需时间Ti的综合  
num[1]=T1+L1;
num[i]=max(num[i-1],sum+Li)
 
用次公式递推出 num[n] 就是最优解。。
 
最优解 :Time = T1+T2+T3+......+Tn + max(  Li-(Ti+1  +...+Tn)  )
 
我们只要让 max( Li-(Ti + Ti+1 +...+Tn) ) 最小就可。。。。 
特殊情况  所有的T都相同的时候 ,很容易得出 。。。按Li 从大到小排序。。。。
证明 :  (对于仅有两个对象a,b时)若Lb <La       已知Tb ,Lb ,Ta,Tb   。则  Lb -  Ta<La   于是La>max(Lb,La-Tb)。其中La为b在a前边max( Li-(Ti+1 +...+Tn) )的情况。 max(L(b,La-Tb)为a在b前边max( Li-(Ti+1 +...+Tn) )的情况。  因此a排在b的前边更优   则 当Lb <La 时 a 应排在 b的前边 
                 对于多个对象是  设 c d 为序列中的两个  设c排在d前    则Lc <Ld。 c在d 前时为 max(Lc -Td -(Td+1 +......+Tn),Ld-(Td+1+........TN))  , c,d互换时 为max(Ld-Tc-(Td+1+....+Tn),Lc-(Td+1+......Tn))       因为max(Lc-Td,Ld)  >max(Ld-Tc,Lc)  所以 c ,d 互换即d排在c之前值是使解为最优解 。所以要排序
 
  所以 L 大的应该排在 L小的前边。。。
前边只是给出为什么要排序。。。   一般为什么排序的原因是 换顺序 特殊情况反正即可
但是为什么排序后就是最优解 。。。   排序后就能够       根据
num[1]=T1+L1;
num[i]=max(num[i-1],sum+Li) 公式推出来
这就类似 归纳推理证明的意味了。。。  
 
注 :  初次写证明如有不正确的  请指正 。。。。。。。。。。。。。。。。
 
附上本人的代码:代码简单就不写注释了。。。。。。。。
 
 
[cpp] view plaincopy
  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <algorithm>  
  5.   
  6. using namespace std;  
  7. int n ;  
  8. struct leaflet{  
  9. int T;  
  10. int L;  
  11.    bool operator <(const leaflet b)const{  
  12.         if(L>b.L)  
  13.           return true;  
  14.     return false ;  
  15.    }  
  16. }lt[120];  
  17. int t[120];  
  18. int l[120];  
  19. int dp[120];  
  20. int max(int a,int b){  
  21.    return (a>b)?a:b;  
  22. }  
  23. int main(){  
  24.       scanf("%d",&n);  
  25.       for(int i=1;i<=n;i++){  
  26.           scanf("%d",&t[i]);  
  27.       }  
  28.       for(int i=1;i<=n;i++){  
  29.           scanf("%d",&l[i]);  
  30.       }  
  31.       for(int i=1;i<=n;i++){  
  32.         leaflet a = {t[i],l[i]};  
  33.     lt[i]=a;  
  34.       }  
  35.       sort(lt+1,lt+n+1);  
  36.       dp[1]=lt[1].T+lt[1].L;  
  37.       int sum = lt[1].T;  
  38.       for(int i=2;i<=n;i++){  
  39.        sum += lt[i].T;  
  40.        dp[i]=max(dp[i-1],sum+lt[i].L);  
  41.       }  
  42.       cout << dp[n];  
  43.         
  44.     return 0;  
  45.   
  46.   
  47. }    
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 北京自考证丢啦怎么办 不服检察院的答复函该怎么办 检察院控申答复函不复怎么办 在看守所里疯了怎么办 第一次吸毒拘留五天第二次会怎么办 被派出所拘留15天怎么办 老公从拘留所出来聪明老婆怎么办 中信信用卡忘记还款了怎么办 监狱的犯人病了怎么办 判缓期间在行政拘留怎么办 法院拘留15天工作怎么办 高血压签定了无期限合同怎么办 法院司法拘留找不到人怎么办 c1骑摩托车要拘留怎么办 欠钱的找不到人怎么办 治安拘留人跑了怎么办 行政拘留拘留所不收应该怎么办 在看守所被打了怎么办 取保候审超过12个月怎么办 拘留20天还没有判刑怎么办 被打了没有证据怎么办 拘留37天后没有放人怎么办 强制执行执行的财产不够怎么办 收到公安局拘留通知家属应该怎么办 对方不出谅解书怎么办 寻衅滋事没抓的 怎么办 公务员政审父母拘留过怎么办 我参与了网赌怎么办 亲人出车祸去世家属怎么办 车牌换了原保险怎么办 北京车牌夫妻变更车险怎么办 赌博拘留15天不交罚款怎么办 给人打了不赔钱怎么办 打了人对方讹钱怎么办 换车了原来的etc怎么办 换异地车牌了etc怎么办 被执行人拘留15天后不还钱怎么办 被执行人拘留后还是不还钱怎么办 摩托车套牌被交警扣了怎么办 套牌摩托车遇到交警怎么办 不知情收到小偷东西了怎么办