博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj-1042 && nyoj-30(Gone fishing)
阅读量:4286 次
发布时间:2019-05-27

本文共 1971 字,大约阅读时间需要 6 分钟。

题目链接:poj ->

nyoj->

题意;有n个湖,每个湖都有fi条鱼,每钓一次就会减少di条鱼,

问一个人在给定的时间内在按照从 1~n 湖中钓的鱼最多是多少,

并输出这个人在些湖中停留的时间

题解: 贪心 + 枚举

注: 枚举所有情况(即1~n的湖)每次找湖中鱼最大的

#include
#include
int f1[30],f2[30];int t[30],t1[30],t2[30];int res[30];int main(){ int n,m,i,j,ret,q = 0; int time, time1 , time2; while(scanf("%d",&n),n) { scanf("%d",&m); time = m * 60; memset(f2,0,sizeof(f2)); for(i = 0 ; i < n; i ++) { scanf("%d",&f1[i]); f2[i] = f1[i] ; } for(i = 0 ; i < n; i ++) scanf("%d",&res[i]); for(i = 1; i < n;i ++) scanf("%d",&t[i]); if(q) printf("\n"); q = 1; int Max = -1;//这个max要小于0 memset(t2,0,sizeof(t2)); for(i = 0 ; i < n; i ++) { memset(t1,0,sizeof(t1)); for(j = 0; j < n ; j ++) f1[j] = f2[j];//还原 time1 = time; for(j = 0 ; j <= i;j ++) time1 -= t[j] * 5;//去湖之间所用的时间 time2 = time1; int sum = 0; while(time2 > 0) { int max = 0;//注:这个max要等于0 int flag = 0,p=0; for(j = 0 ; j <= i; j ++) //每次查找鱼最多的湖 { if(max < f1[j]) { max = f1[j]; p = j ; flag = 1; } } if(flag) t1[p] += 5; sum += max ; if(f1[p] > 0) f1[p] -= res[p] ; time2 -= 5; } if(Max < sum ) { Max = sum ; ret = time1; for(j = 0 ; j < n ; j ++) t2[j] = t1[j] ; } } int ans = 0 ; for(i = 1; i < n;i ++) ans += t2[i]; t2[0] = ret - ans ; printf("%d",t2[0]); for(i = 1; i < n;i ++) printf(", %d",t2[i]); printf("\n"); printf("Number of fish expected: %d\n",Max); }}

转载地址:http://bysgi.baihongyu.com/

你可能感兴趣的文章