while (1): study();
[알고스팟] 도시락 데우기 본문
728x90
링크: https://algospot.com/judge/problem/read/LUNCHBOX
algospot.com :: LUNCHBOX
Microwaving Lunch Boxes 문제 정보 문제 After suffering from the deficit in summer camp, Ainu7 decided to supply lunch boxes instead of eating outside for Algospot.com winter camp. He contacted the famous packed lunch company "Doosot" to prepare N lun
algospot.com
<파이썬3 소스코드>
import sys
rl = lambda: sys.stdin.readline()
def min_time():
time = [(_m, _e) for _m, _e in zip(m, e)]
time.sort(key=lambda x: x[1], reverse=True)
heat, eat = 0, 0
for current_m, current_e in time:
heat += current_m
eat = max(eat - current_m, current_e)
return heat + eat
for _ in range(int(rl())):
N = int(rl())
m = list(map(int, rl().split()))
e = list(map(int, rl().split()))
print(min_time())
<C++ 소스코드>
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
int minTime(const vector<int> m, const vector<int> e)
{
int heat = 0, eat = 0;
vector<pair<int, int>> time;
for (int i = 0; i < m.size(); i++)
time.push_back(make_pair(-e[i], m[i]));
sort(time.begin(), time.end());
for (int i = 0; i < m.size(); i++)
{
heat += time[i].second;
eat = max<int>(eat - time[i].second, -time[i].first);
}
return heat + eat;
}
vector<int>& getInput(vector<int>& vec, const int length)
{
for (int n = 0; n < length; n++)
{
int elem;
scanf("%d", &elem);
vec.push_back(elem);
}
return vec;
}
int main(void)
{
int T;
scanf("%d", &T);
for (int t = 0; t < T; t++)
{
int N;
scanf("%d", &N);
vector<int> m, e;
m = getInput(m, N);
e = getInput(e, N);
int result = minTime(m, e);
printf("%d\n", result);
}
return 0;
}
728x90
'알고리즘' 카테고리의 다른 글
[알고스팟] 출전 순서 정하기 (탐욕법 레시피) (0) | 2022.01.02 |
---|---|
최적화 문제의 결과 출력 - 배낭 문제(Knapsack Problem) (0) | 2022.01.02 |
[알고스팟] 최대 증가 부분 수열 (0) | 2021.12.30 |
[알고스팟] 삼각형 위의 최대 경로 (최적 부분 구조) (0) | 2021.12.30 |
[알고스팟] 외발뛰기 (0) | 2021.12.30 |
Comments