본문 바로가기

Solutions/Dlbo's Solution

PKU 2291. Rotten Ropes. AC get -_-!

#include 
#include 

int cal[1000];

int chk(const void * a,const void * b)
{
	if (*(int*)a > *(int*)b)
	{
		return -1;
	}
	else if (*(int*)a == *(int*)b)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

int main()
{
	int cases, n, t, w, i, j, max;

	scanf("%d", &cases);
	while(cases--)
	{
		max = 0;
		scanf("%d", &n);
		for (i = 0; i < n; i++)
		{
			scanf("%d", &cal[i]);
			if (cal[i] > max)
			{
				max = cal[i];
			}
		}

		qsort(cal, n, sizeof(int), chk);

		for (i = n - 1; i >= 0; i--)
		{
			if (cal[i] * (i + 1) > max)
			{
				max = cal[i] * (i + 1);
			}
		}

		printf("%d\n", max);
	}

	return 0;
}


우쒸 몸 열라리 아프네요

숨을 못쉬어 -_-

그냥 간단합니다.

제일 약한 로프만큼만 걸 수 있으니까

큰 숫자부터 소트 때려버리고

가장 작은 숫자부터 버틸 수 있는 무게 * 밧줄 갯수

한 값이 가장 크면 그게 답입니다.

간단히 말해서 10 1 15면

15 10 1로 소트해놓고

1부터 역으로 1 * 3은 3이니 최대 3,

10 * 2는 20이니 최대 20

15 * 1은 15니 최대 15

이중 답은 20

요렇게 풀어나가면 간단.