UVA - 757 Gone Fishing

来源:互联网 发布:条码打印软件使用方法 编辑:程序博客网 时间:2024/05/17 23:49

题意:参考点击打开链接

#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int MAXN = 35;int h,n;int ans[MAXN],tmp[MAXN];struct Node{    int no;    int rate;    int down;    int time;    friend bool operator < (const Node &a,const Node &b)    {        if (a.rate != b.rate)            return a.rate < b.rate;        return a.no > b.no;    }}arr[MAXN];priority_queue<Node>que;void greedy(){    int maxsum = -11111;    for (int i = 0; i < n; i++)    {        while (!que.empty())            que.pop();        for (int j = 0; j <= i; j++)             que.push(arr[j]);        int leftTime = h * 60 - arr[i].time,sum = 0;        memset(tmp,0,sizeof(tmp));        while (leftTime > 0)        {            Node temp = que.top();            que.pop();            if (temp.rate <= 0)                break;            sum += temp.rate;            temp.rate -= temp.down;            tmp[temp.no] += 5;            que.push(temp);            leftTime -= 5;        }        if (leftTime > 0)            tmp[0] += leftTime;        if (sum > maxsum)        {            maxsum = sum;            for (int j = 0; j < n; j++)                ans[j] = tmp[j];        }    }    printf("%d",ans[0]);    for (int i = 1; i < n; i++)        printf(", %d",ans[i]);    printf("\n");    printf("Number of fish expected: %d\n",maxsum);}int main(){    bool flag = false;    while (scanf("%d",&n) != EOF && n)    {        scanf("%d",&h);        for (int i = 0; i < n; i++)        {            scanf("%d",&arr[i].rate);            arr[i].no = i;        }        for (int i = 0; i < n; i++)            scanf("%d",&arr[i].down);        arr[0].time = 0;        for (int i = 1; i < n; i++)        {            int t;            scanf("%d",&t);            arr[i].time = arr[i-1].time + t * 5;        }        if (flag)            printf("\n");        else flag = true;        greedy();    }    return 0;}



原创粉丝点击