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

pku 1042 Gone Fishing

2010-08-21 20:54 375 查看
http://acm.pku.edu.cn/JudgeOnline/problem?id=1042
题意:在规定的时间内钓鱼的数量最多,枚举加贪心
#include <iostream>
#include <cstdio>
using namespace std;

int n,h,f[30],f1[30],d[30],t[30];

int chazhao(int n)//查找鱼最多的岛
{
int i,falg = 1;
for(i = 1;i <= n;i++)
if(f[falg] < f[i])
{
falg = i;
}
return falg;
}

int main()
{

int i,j,max,Max,falg,time,times;
int count[30],count1[30];
while(scanf("%d",&n) != EOF && n)
{
scanf("%d",&h);

memset(count1,0,sizeof(count1));
memset(f,0,sizeof(f));
memset(d,0,sizeof(d));
memset(t,0,sizeof(t));
for(i = 1;i <= n;i ++)
{
scanf("%d",&f[i]);
f1[i] = f[i];
}
for(i = 1;i <= n;i ++)
scanf("%d",&d[i]);
for(i = 1;i < n;i ++)
scanf("%d",&t[i]);
Max = -1;
for(i = 1;i <= n;i++)
{
time = 0;
max = 0;
memset(count,0,sizeof(count));
for(j = 1;j <= i;j ++)
time += t[j-1]*5;
times = (h * 60 - time)/5;
if(times <= 0)
continue;
while(1)
{
falg = chazhao(i);
if(f[falg] <= 0)
break;
max += f[falg];
count[falg] ++;
times --;
f[falg] -= d[falg];
if(f[falg] < 0)
f[falg] = 0;
if(times == 0)
break;
}
if(times)
count[1] += times;

if(Max < max)
{
Max = max;
for(j = 1;j <= i;j++)
count1[j] = count[j];
}
for(j = 1;j <= n;j++)
f[j] = f1[j];
}
for(i = 1;i < n;i ++)
printf("%d, ",count1[i]*5);
printf("%d/n",count1
*5);
printf("%s%d/n/n","Number of fish expected: ",Max);
}
return 0;
}

/*
2
1
10 1
2 5
2
4
4
10 15 20 17
0 3 4 3
1 2 3
4
4
10 15 50 30
0 3 4 3
1 2 3
0

45, 5
Number of fish expected: 31

240, 0, 0, 0
Number of fish expected: 480

115, 10, 50, 35
Number of fish expected: 724
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: