51nod 2387 戴德兰

牛牛非常喜欢赶deadline。
输入n, c, d
一共有n个任务,第i个任务需要a[i]分钟完成

特别的,在最后d分钟,牛牛的效率会变成双倍(耗时变为一半)

可能出现一个任务前半部分不在最后d分钟,后半部分在最后d分钟

那么只有在最后d分钟的后半部分效率会变为双倍。
牛牛希望在c分钟内完成的任务尽可能多,问最多可以完成多少个任务。
耗时变为一半,是不取整的,如果出现0.5,那么就是0.5。

对于100%的数据,1 <= n <= 10000, 1 <= d <= c <= 100000, 1 <= a[i] <= c。
对于40%的数据,1 <= n <= 20。
对于70%的数据,1 <= n <= 1000, 1 <= c <= 1000。

 

输入

输入第一行三个整数n, c, d。
接下来一行n个整数a[i]。

输出

输出一行一个整数,表示答案。

输入样例

4 10 5
8 10 1 2

输出样例

3

相当于加了d的时间
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
int n,c,d;
int s[10000];
int main() {
    scanf("%d%d%d",&n,&c,&d);
    for(int i = 0;i < n;i ++) {
        scanf("%d",&s[i]);
    }
    sort(s,s + n);
    c += d;
    int ans = 0;
    while(c - s[ans] >= 0) c -= s[ans ++];
    printf("%d",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/8023spz/p/10879806.html