ACdream 1073

来源:互联网 发布:linux怎么运行多线程 编辑:程序博客网 时间:2024/05/17 22:33
题目大意:中文题

解题思路:根据风风的习惯,就是如果有能够升一星的就选能升一星的最低经验球,否则就选经验最大的使用。看懂以后就明白了,先排序,然后用贪心模拟风风的做法。

ac代码:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int main(){int n, level[4], ex[1005], vis[1005], cnt, pos;while (scanf("%d", &n)!=EOF){cnt = 0;for (int i=0; i<4; i++)scanf("%d", &level[i]);for (int i=0; i<n; i++){scanf("%d", &ex[i]);vis[i] = 1;}sort(ex, ex+n);while (cnt < 4){while (1){pos = 0;for (int i=0; i<n; i++)pos += vis[i];for (int i=0; i<n; i++)if (vis[i]){if (ex[i] >= level[cnt]){pos = i + 1;break;}pos = i + 1;}if (pos){level[cnt] -= ex[pos - 1];vis[pos-1] = 0;}if (level[cnt] <= 0 || !pos){cnt++;break;}}}for (int i=0; i<4; i++){if (level[i] > 0)cnt = 0;}if (cnt){cnt = 0;for (int i=0; i<n; i++)if (vis[i])cnt += ex[i];printf("YES %d\n", cnt);}elseprintf("NO\n");}return 0;} 


原创粉丝点击