• 赚经验


    题目描述

    小明在玩一款电脑游戏,里面有一关是这样的:
    战场上有n个敌人,小明必须把他们全部打败才能通过这关,不过战斗顺序可以小明自己决定。小明如果打败一个比自己经验值高的敌人,那么小明会赚取2点经验值,否则赚取1点经验值。
    现在给你小明初始时的经验值和n个敌人的经验值,你能计算出小明最后经验值最高可以到多少吗?

    输入格式

    输入包含多组测试数据。
    每组第一行输入两个正整数N(N<=500)和E(E<=1000),N表示敌人的个数,E表示小明初始时的经验值。
    接下来一行输入N个正整数,表示每个敌人的经验值,所有经验值均不超过1000。

    输出

    对于每组输入,输出小明最后可以到达的最高经验值。

    样例输入

    5 91
    88 90 92 94 98

    样例输出

    99

    分析:

    很简单的一道贪心题,先把比小明经验值大的敌人按照经验值从小到大排序,然后从这些人中经验值最小的那个敌人开始逐一打败,最后再打败那些一开始经验值就比小明低的敌人,这就是最优解。

    源码:

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[1009];
    int main()
    {
        int m,n;
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            for(int i=0;i<m;i++)
            scanf("%d",&a[i]);
            sort(a,a+m);
            int w=0;
            for(int j=0;j<m;j++)
            {
                if(a[j]>n)
                {
                    n+=2;
                    w++;
                }
            }
            int p;
            p=m-w;
            n+=p;
            printf("%d
    ",n);
        }
        return 0;
    }
    


  • 相关阅读:
    Android自动化测试中如何处理各种弹窗
    产品经理的私房菜
    Java基础——ArrayList方法全解(字典版)
    ESP8266 WIFI杀手汉化教程 &烧录
    c语言数据拼包
    阿里开源Java诊断工具--Arthas入门
    Java并发包9--Future接口简介
    官宣|VS Code 1.59 发布!Terminal 可以跨窗口移动了!
    微软内推常见问题 Q&A
    03-Numpy库
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3221608.html
Copyright © 2020-2023  润新知