提交题目之后 超时了 如何解决

t (1≤t≤105)
n and H (2≤n≤103,1≤H≤109)
n integers a1,a2,…,an (1≤ai≤109)


#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1005;
int n, H, a[maxn] = { 0 }, v = 1, times[maxn] = { 0 };//n为武器数量,H为血量,a[]为各武器攻击力,times为攻击次数
int t;//测试次数
int main() {

    cin >> t;
    for (int m = 1;m <= t;m++)
    {
        cin >> n >> H;
        for (int i = 0;i < n;i++) {
            cin >> a[i];//输入每个武器的攻击力

        }
        sort(a, a + n);//攻击力排序

        while (H > 0) {
            if (v == 1) {
                H -= a[n - 1];//用攻击最高的武器
                times[m - 1] += 1;
                v = 0;
            }
            else {
                H -= a[n - 2];//用次高的武器
                times[m - 1] += 1;
                v = 1;
            }
        }

    }
    for (int i = 0;i < t;i++) {
        cout << times[i] << endl;//输出攻击次数
    }
    return 0;
}

有帮助望采纳

 
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1005;
int n, H, a[maxn] = { 0 }, v = 1, times[maxn] = { 0 };//n为武器数量,H为血量,a[]为各武器攻击力,times为攻击次数
int t;//测试次数
int main() {
    scanf("%d",&t);
    for (register int m = 1;m <= t;m++)
    {
        scanf("%d%d",&n,&H);
        for (register int i = 0;i < n;i++) {
            scanf("%d",&a[i]);//输入每个武器的攻击力
        }
        stable_sort(a, a + n);//攻击力排序
        while (H > 0) {
            if (v == 1) {
                H -= a[n - 1];//用攻击最高的武器
                times[m - 1] += 1;
                v = 0;
            }
            else {
                H -= a[n - 2];//用次高的武器
                times[m - 1] += 1;
                v = 1;
            }
        }
    }
    for (register int i = 0;i < t;i++) {
        printf("%d\n",times[i]);//输出攻击次数
    }
    return 0;
}

超时不就优化呗😏,程序时间复杂度太高