POJ 1042(枚举 + 优先队列)(好像比DP要快点)

/*
	一,用枚举加优先队列的话,要注意以下一些地方,(搞的重写,才解决的) 
		a, 注意,当总钓鱼数为0时,所有时间,放到第一个湖中;
		b, 可以把题目中DISCUSS 里的一些先人尝试过的数进行测试;总比自己去想测试数据要好一些; 
*/
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <queue>
using namespace std;
int n,h,H, res, Sres;
typedef struct node{
	int f,d,t,id;
	friend bool operator < (const node a, const node b){
		if(a.f == b.f){
			return a.id > b.id;
		}
		return a.f<b.f;
	}
} node;
priority_queue<node> que;
int f[30], f2[30], d[30], d2[30], t[30], t2[30];

int isEnd(int k){
	for(int i=1; i<=k; ++i){
		if(f[i] > 0){
			return 1;
		}
	}
	return 0;
}

int main(){
//	freopen("a.txt", "r", stdin);
	while(scanf("%d", &n) && n)	{
		scanf("%d", &H);
		//输入开始 
		for(int i=1; i<=n; ++i){
			scanf("%d", &f[i]);
			f2[i] = f[i];			
		}
		for(int i=1; i<=n; ++i){
			scanf("%d", &d[i]);
			d2[i] = d[i];
		}
		for(int i=1; i<n; ++i){
			scanf("%d", &t[i]);
			t2[i] = t[i];
		}
		//输入结束 
		//开始处理数据
		node node1;
		Sres = 0;
		for(int k=1; k<=n; ++k){
			while(!que.empty()) que.pop();
			for(int i=1; i<=k; ++i){
				f[i] = f2[i];
			}
			h = H*60;
			res = 0;
			for(int i=1; i<=k; ++i){
				node1.id = i;
				node1.f = f[i];
				node1.d = d[i];
				node1.t = 0;
				que.push(node1);
			}
			
			for(int i=1; i<k; ++i){
				h -= t[i]*5;
			}			
			

			while(h>0 && isEnd(k)){
				node1 = que.top(); que.pop();
				res += node1.f;
				node1.f -= node1.d;
				++node1.t;
				f[node1.id] -=  d[node1.id];
				h = h - 5;
				que.push(node1);
			}
			if(Sres < res){				
				Sres = res;
				while(!que.empty()){
					node1 = que.top(); que.pop();
					t2[node1.id] = node1.t*5;
				}
				for(int i=k+1; i<=n; ++i){					
					t2[i] = 0;
				}
				if(h>0){
					t2[1] += h;
				}
			}
			
		}
		if(Sres == 0){
				t2[1] = H*60;
				for(int i=2; i<=n; ++i){
					t2[i] = 0;
				}
		}
		for(int i=1; i<=n; ++i){
			printf("%d", t2[i]);
			if(i+1 <= n)	{
				printf(", ");
			}
		}
		printf("\n");
		printf("Number of fish expected: %d\n\n", Sres);
	}
	return 0;
}

发布了76 篇原创文章 · 获赞 0 · 访问量 7192

猜你喜欢

转载自blog.csdn.net/julicliy/article/details/79599873
今日推荐