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;
}
超时不就优化呗😏,程序时间复杂度太高