View Code of Problem 3565

#pragma warning (disable:4996)
#include<stdio.h>
int n, h, fi[30], di[30], ti[30] = { 0 };
struct node
{
	int num[30];
	int max;
}end_node[30];
int get_max(int *fish, int left, int right)
{
	int max = fish[left], re = left;
	for (int j = left + 1; j <= right; j++)
	{
		if (max < fish[j])
		{
			max = fish[j];
			re = j;
		}
	}
	return re;
}
void fishing()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			end_node[i].num[j] = 0;
		end_node[i].max = 0;
	}
	for (int i = 0; i < n; i++)
	{
		int ffi[30], t = 0, at = h * 60;
		for (int j = 0; j <= i; j++)
		{
			ffi[j] = fi[j];
			at -= ti[j] * 5;
		}
		while (t < at)
		{
			int tmp = get_max(ffi, 0, i);
			end_node[i].num[tmp] += 5;
			end_node[i].max += ffi[tmp];
			ffi[tmp] -= di[tmp];
			if (ffi[tmp] < 0) ffi[tmp] = 0;
			t += 5;
		}
	}
	int ffi[30],max;
	for (int i = 0; i < n; i++)
		ffi[i] = end_node[i].max;
	max = get_max(ffi, 0, n);
	for (int i = 0; i < n; i++)
	{
		if (i != n - 1)
			printf("%d, ", end_node[max].num[i]);
		else
			printf("%d", end_node[max].num[i]);
	}
	printf("\nNumber of fish expected: %d\n\n", end_node[max].max);
}
int main(void)
{
	while (scanf("%d", &n),n)
	{
		scanf("%d", &h);
		for (int i = 0; i < n; i++)
			scanf("%d", &fi[i]);
		for (int i = 0; i < n; i++)
			scanf("%d", &di[i]);
		for (int i = 1; i < n; i++)
			scanf("%d", &ti[i]);
		fishing();
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 3565