您的位置:首页 > 编程语言 > C语言/C++

雷霆战机

2016-07-18 14:41 417 查看

雷霆战机

题目大意:输入4个阶段所需要的经验值,和n个经验球,升阶段时经验不能累加,试着用最少的球升到满级。

解题思路:直接模拟

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int cmd(const void *a, const void *b) {
return (*(int*)a-*(int*)b);
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
long long int b[10000];
long long int a[4];
for(int i = 0; i < 4; i++) {
scanf("%lld", &a[i]);
}
for(int i = 0; i < n; i++) {
scanf("%lld", &b[i]);
}
qsort(b,n,sizeof(long long int),cmd);
int max = n - 1;
int p;
for(int i = 0; i < 4;) {
int s = 0;
if(b[max] == 0)
break;
for(int j = 0; j < n; j++){
if(b[max] == 0) {
i--;
break;
}
if(s + b[j] >= a[i]) {
b[j] = 0;
s = 0;
if(j == max) {
for(int z = max;z >= 0;z--) {
if(b[z] != 0) {
max = z;
break;
}
}
}
break;
}
else if(j == max) {
s = s + b[max];
j = -1;
b[max] = 0;
for(int z = max; z >= 0; z--) {
if(b[z] != 0) {
max = z;
break;
}
}
}
}
i++;
p = i;
}
if(p == 4) {
long long int sum = 0;
for(int i = 0; i < n; i++)
sum = sum + b[i];
printf("YES %lld\n", sum);
}
else
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言