ZOJ1161

来源:互联网 发布:mac 配置hadoop 编辑:程序博客网 时间:2024/06/03 21:20
#include<iostream>#include<vector>#include<string>#include<set>#include<memory.h>#include<cstdio>#include<list>#include<string>#include<map>#include<cmath>#include <algorithm>#include <queue>#define NUM 30#define maxint 10000000#define INF 0x3f3f3f3f#define Max 5001using namespace std;int c[NUM][NUM];//用邻接矩阵存储边和权int dist[NUM];string a;int k;struct Node{    int f;//初始时鱼的条数    int d;//鱼减少    int index;};int f[NUM];//初始时鱼的条数int d[NUM];//鱼减少int t[NUM];//时间int plan[NUM];//在每个湖所用的时间int best ;//void greedy(int pos, int time)//{//    if (time <= 0) return;//    int i, j;//    int fish[NUM];//    int p[NUM];//    int t = 0;//    for (i = 0; i <= pos; ++i)//        fish[i] = f[i];//    memset(p, 0, sizeof(p));//    for (i = 0; i < time; ++i)//    {//        int max = 0;//        int id = -1;//        for (j = 0; j <= pos; ++j)//            if (fish[j] > max){//                max = fish[j];//                id = j;//            }//        if (id != -1)//        {//            ++p[id];//            fish[id] -= d[id];//            t += max;//        }//        else ++p[0];//    }//    if (t > best)//    { //        best = t; //        memset(plan, 0, sizeof(plan)); //        for (i = 0; i <= pos; ++i)//            plan[i] = p[i]; //    } //}void greedy(int pos ,int time){    if(time <= 0) return;        int Fish[NUM];    int P[NUM];//在每个湖用的时间    memset(P, 0, sizeof(P));    for(int i = 0;i<= pos;i++)    {        Fish[i] = f[i];    }        int t = 0;    while(time--)    {        int max = 0;        int id = -1;        for(int i  = 0;i<=pos;i++)        {            if(max<Fish[i])            {                max = Fish[i];                id = i;            }        }        if(id != -1)        {            Fish[id] -= d[id];            t += max;            P[id]++;        }        else        {            P[0]++;        }    }    if(t>best)    {        for(int i = 0;i<=pos;i++)        {            plan[i] = P[i];        }        best = t;    }}int main(){    freopen("in.txt","r",stdin);    int N;    cin>>N;    while(N--)    {        int n;//湖的个数        int h;//总时间        int flag = 0;        while(scanf("%d",&n) && n!=0)        {            memset(plan, 0, sizeof(plan));            scanf("%d",&h);            h*=12;            int i ;            for(i = 0;i<n;i++)            {                scanf("%d",&f[i]);            }            for(i = 0;i<n;i++)            {                scanf("%d",&d[i]);            }            for(i = 0;i<n-1;i++)            {                scanf("%d",&t[i]);            }            int time = 0;            best = -1;//记录当前钓的鱼的条数            for(int i = 0;i<n && h-time;i++)            {                greedy(i , h - time);                time += t[i];            }            if (flag++) printf("\n");            for (i = 0; i < n - 1; ++i)                printf("%d, ", plan[i] * 5);            printf("%d\n", plan[n - 1] * 5);            printf("Number of fish expected: %d\n", best);        }        if(N)            printf("\n");    }}


0 0