zcmu-1018 突击战(贪心算法)

【题述】

Description

你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交待任务,然后他会立刻独立地、无间断地执行Ji分钟后完成任务。你需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完成的任务应尽早结束)。注意,不能同时给两个部下交待任务,但部下们可以同时执行他们各自的任务。

Input

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

Output

对于每组数据,先输出“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

HINT

 

对于Sample里的第一组数据,你给部下交待任务的顺序应该是1,2,3得到最早的完成时间是8;

 

第二组数据,你给部下交待任务的顺序应该是3,2,1得到最早的完成时间是15。

思路:

1.交代完第一个人,第一个人在执行任务的同时可以交代第二个人的任务

2.因为部下在执行任务的时候,我可以同时交代别人,所以把执行任务的时间从大到小排以优化时间,最理想化状态就是第一个人执行任务时,我给其他人交代任务,并且其他人同时开始执行任务,只要第一个人的执行时间够长,那么最终时间就只算第一个人的交代任务时间和执行任务时间

3.注意交代任务的时间是实打实的,不可以同时进行,所以一定会被算进所需时间里

4.交代第一个人的时间一定会被算进去,接下来每一步我们判断J和下一个人的B+J的大小来选择添加哪一部分的时间

【通过代码】

#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
 struct BJ{
    int b,j;
};
int cmp(BJ a,BJ b){
    return a.j>b.j;

}
int main(){
    int n,i,t,sum,ans;
    BJ ex[10005];
    t=1;
    while(scanf("%d",&n)!=EOF){
        sum=0;
        if(n==0)
            break;
        for(i=0;i<n;i++){
            scanf("%d%d",&ex[i].b,&ex[i].j);
        }
        sort(ex,ex+n,cmp);
        ans=0;
        for(i=0;i<n;i++){
            ans+=ex[i].b;
            if(ans+ex[i].j>sum)
                sum=ans+ex[i].j;//核心
        }
        printf("Case %d: %d\n",t,sum);
        t++;
    }

    return 0;
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: zcmu 1093 简单计算器是一道编程题目,要求实现一个简单的计算器,能够进行加、减、乘、除四种基本运算。该题目主要考察编程基础能力和算法思维能力,需要熟练掌握基本的运算符和控制语句,能够设计合理的算法实现计算器功能。 ### 回答2: zcmu 1093 简单计算器是一种基于计算机技术的工具,用于进行基本算术运算,如加减乘除等。它能够简化我们在日常生活中的计算工作,提高计算效率,减少出错率。 使用zcmu 1093 简单计算器非常简单,只需输入需要计算的数字和符号,就能够得到计算结果。它可以进行多个数字之间的复杂运算,同时还支持小数、百分数、平方根等复杂运算。另外,zcmu 1093 简单计算器还可以存储中间计算结果,方便我们进行多步计算或调整计算过程。 除了日常的计算工作,zcmu 1093 简单计算器还可用于科学计算、工程设计等领域。许多专业软件都是基于简单计算器原理设计的,它们具有更高的计算精度和更复杂的运算能力,能够支持更高级别的科学计算和技术分析。 总之,zcmu 1093 简单计算器在日常生活中有着广泛的应用,它使我们的计算工作变得更加高效、准确。并且,随着科技的不断发展,这种计算工具也在不断地更新和改进,为我们的计算工作提供更加便捷、多样化的选择。 ### 回答3: ZCMU 1093 简单计算器是一道基础的算法题目,需要实现一个简单的计算器程序,支持加、减、乘、除四种基本运算,可以对两个整数进行运算并输出结果。 要实现这道题目,首先需要根据输入的运算符来判断应该进行的运算类型,并根据运算符的不同,执行不同的计算操作。同时,应注意除数不能为零的情况,避免程序出现异常。 在编写程序的过程中,可以使用 switch case 语句来判断不同的运算类型,并执行相应的计算操作。同时,为了能有效地判断输入的运算符,可以使用输入字符串的方式进行处理,提取出运算符进行比较。 此外,在程序中还需要进行合法性判断,确保输入的数字均为整数且在合理的范围内,以避免程序运行出现异常情况。同时,还需要考虑输入格式的问题,应确保输入的数字和运算符符合题目要求。 综上所述,ZCMU 1093 简单计算器是一道基础的算法题目,需要实现一个简单的计算器程序,支持加、减、乘、除四种基本运算,注意程序的合法性判断和输入格式的处理,能够熟练地运用 switch case 等语句完成程序的编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值