雷霆战机
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 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储
- C语言中计算正弦的相关函数总结