您的位置:首页 > 编程语言 > Go语言

poj 1042 gone fishing 贪心+枚举

2009-12-02 23:33 423 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 30
int f[MAX],d[MAX],t[MAX],stay[MAX];

int CalculateMostFish(int totalTimes,int end)
{
int i,j,k,l,m,n,lastMaxIndex,max=-1,fishSum=0;
int realFish[MAX];

memcpy(realFish,f,sizeof(f));
memset(stay,0,sizeof(stay));
for(i=1;i<=totalTimes;i++)
{
// Get the max fish num
max=-1;        //forget it !!!
lastMaxIndex=end;
stay[lastMaxIndex]+=5;  //wrong  first stay[lastMax]=5 !!!
for(j=end;j>=1;j--)
{
if(realFish[j]>=max)
{
max=realFish[j];
stay[lastMaxIndex]-=5;
stay[j]+=5;
lastMaxIndex=j;
}
}

fishSum+=max;
realFish[lastMaxIndex]-=d[lastMaxIndex];
if(realFish[lastMaxIndex]<0)
{
realFish[lastMaxIndex]=0;
}

}

return fishSum;

}

void CalculateMostFishes(int islandNum,int totalHour)
{
int end,j,k,l,i,m,n,maxFishSum=-1,totalTimes,result;
int maxFishStay[MAX];

totalTimes=totalHour*60/5;
memset(stay,0,sizeof(stay));
for(end=1;end<=islandNum;end++)
{
totalTimes=totalTimes-t[end];
result=CalculateMostFish(totalTimes,end);
if(result>maxFishSum)
{
maxFishSum=result;
memset(maxFishStay,0,sizeof(maxFishStay));
memcpy(maxFishStay,stay,sizeof(stay));
}
}

for(i=1;i<=islandNum;i++)
{
if(i!=islandNum)
{
printf("%d",maxFishStay[i]);
printf(", ");
}
else
{
printf("%d/n",maxFishStay[i]);
}
}

printf("Number of fish expected: %d/n/n",maxFishSum);
}

int main()
{
int islandNum,totalHour,i,j,k;

scanf("%d",&islandNum);
while(islandNum!=0)
{
memset(t,0,sizeof(t));
memset(d,0,sizeof(d));
memset(f,0,sizeof(f));
scanf("%d",&totalHour);
for(i=1;i<=islandNum;i++)
{
scanf("%d",&f[i]);
}

for(i=1;i<=islandNum;i++)
{
scanf("%d",&d[i]);
}

for(i=1;i<islandNum;i++)
{
scanf("%d",&t[i+1]);
}

CalculateMostFishes(islandNum,totalHour);

scanf("%d",&islandNum);
}

system("pause");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: