zoukankan      html  css  js  c++  java
  • uva11729 水题

    或许每个人都有成为将军的梦想,小光也是如此。从小,小光就立志长大了以后要做一名军人,保家卫国。有一天,他做了一个梦,在梦里,他是一个英明神武的将军,但是敌国马上就要入侵了,作为将军的他责无旁贷需要挺身而出,于是他开始做一些战略部署。
    假设当前小光有n个部下,每个部下需要完成一项任务。第i个部下需要小光花Bi分钟交代任务,然后他会立刻独立地、无间断地执行Ji分钟后完成任务。小光需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交代任务,但部下们可以同时执行他们各自的任务。
    Input

    输入包含多组数据,每组数据的第一行为部下的个数n(1<=n<=1000);以下n行,每行两个正整数B和J(1<=B<=10000,1<=J<=10000),即交待任务的时间和执行任务的时间。输入结束标志为n=0。
    Output

    对组每组数据,输出所有任务完成的最短时间。具体输出格式见样例,用Case开头,Case以后输出当前数据的序号,然后输出答案。
    Sample Input
    3
    2 5
    3 2
    2 1
    3
    3 3
    4 4
    5 5
    0
    Sample Output
    Case 1: 8
    Case 2: 15

    解法: 贪心, 将执行任务的时间 排个序,从大到小依次执行,用 pair 容器比较方便, 于是就用了 

    #include<cstdio>
    #include<algorithm>
    const int ma = 1e4+100;
    
    using namespace std;
    
    int main(){
        pair<int,int> a[ma];
        int n,kase = 1;
        while(scanf("%d", &n)==1 && n){
    
            for(int i = 0; i < n; i++)scanf("%d%d", &a[i].second, &a[i].first);
            sort(a, a+n);
            //for(int i = 0; i < n; i++)printf("%d%d
    ", a[i].second, a[i].first);
            //memset(a, 0, sizeof(a));
            int com = a[n-1].second+a[n-1].first;
            int le = 0,ri = 0;
            for(int i = n-1; i >= 0; i--){
                le += a[i].second;
            
                ri = max(le+a[i].first,ri);
            }
    
            printf("Case %d: %d
    ", kase++, ri);
        }
        return 0;
    }
    /*
    Sample Input
    3
    2 5
    3 2
    2 1
    3
    3 3
    4 4
    5 5
    0
    Sample Output
    Case 1: 8
    Case 2: 15
    */
  • 相关阅读:
    STL与基础数据结构
    solr基础总结
    linux命令笔记
    SolrCloud集群部署
    oracle SQL笔记
    内存溢出之Tomcat内存配置
    solr查询优化(实践了一下效果比较明显)
    JAVA处理线程超时
    Solr 数据导入 <一>DIH简单使用
    几种防止表单重复提交的方法
  • 原文地址:https://www.cnblogs.com/163467wyj/p/10720677.html
Copyright © 2011-2022 走看看