POJ 1042

利用貪心策略,以及枚舉ios

枚舉在前n個湖中選擇,這樣總時間h中分出固定一部分用於走遍前n個湖優化

這就像延遲記錄的技巧,排除在前n個湖走遍的時間,以後的問題就能夠轉化爲你能夠在這n個湖中任意選擇了spa

中間能夠利用最大隊優化,此處略過code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxh= 20;
const int maxn= 25+3;
const int INF= 0X7f7f7f7f;

int fi[maxn], di[maxn], ti[maxn], pln[maxn];
int ans;

inline void Init()
{
    memset(ti, 0, sizeof(ti));
    memset(pln, 0, sizeof(pln));
    ans= -INF;
}
void Copy(int bnd, int *src, int *dst)
{
    for (int i= 1; i<= bnd; ++i){
        dst[i]= src[i];
    }
}
void OutAns(const int n)
{
    for (int i= 1; i<= n; ++i){
        printf("%d", pln[i]);
        if (n!= i){
            printf(", ");
        }
    }
    putchar('\n');
    printf("Number of fish expected: %d\n\n", ans);
}
int main()
{
    int h, n, tph;
    int tpfi[maxn], tppl[maxn];
    while (EOF!= scanf("%d", &n) && n){
        scanf("%d", &h);
        Init();
        for (int i= 1; i< n+1; ++i){
            scanf("%d", fi+i);
        }
        for (int i= 1; i< n+1; ++i){
            scanf("%d", di+i);
        }
        for (int i= 1; i< n; ++i){
            scanf("%d", ti+i);
            ti[i]+= ti[i-1];
        }

        int lake;
        for (int i= 1; i< n+1; ++i){
            tph= h*60- 5*ti[i-1];
            int tpas= 0;
            Copy(i, fi, tpfi);
            memset(tppl, 0, sizeof(tppl));

            while (tph> 4){
                int maxfi= 0;

                for (int j= 1; j<= i; ++j){
                    if (tpfi[j]> maxfi){
                        lake= j;
                        maxfi= tpfi[lake];
                    }
                }

                if (maxfi<= 0){
                    break;
                }

                tph-= 5;
                tppl[lake]+= 5;
                tpas+= maxfi;
                tpfi[lake]= maxfi> di[lake] ? tpfi[lake]-di[lake] : 0;
            }
            if (tpas> ans){
                ans= tpas;
                Copy(i, tppl, pln);
                pln[1]+= tph;
            }
        }
        OutAns(n);
    }
    return 0;
}
相關文章
相關標籤/搜索