http://www.acmicpc.net/problem/18234
정렬을 사용하는 그리디 문제였습니다.
초기값 Wi가 주어지고 시간이 1씩 지날수록 Pi만큼 맛이 커지는데 Pi는 Wi보다 크다는 조건이 있습니다.
따라서 Wi를 바로 먹기보다 시간이 지나고 먹는게 무조건 크다는걸 알 수 있습니다.
이를 적용하면 Pi가 클수록 가능한 늦게먹으면 됩니다. T가 N보다 크므로 T-N부터 Pi가 작은거부터 먹기 시작하면 됩니다.
#include<stdio.h>
#include<queue>
#include<vector>
#include<iostream>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
void fast_io() {
cin.tie(0)->sync_with_stdio(0);
}
int main(){
fast_io();
int N,T;
cin>>N>>T;
vector<pair<int,int>> vec;
for(int x=0;x<N;x++){
int a,b;
cin>>a>>b;
vec.push_back({b,a});
}
sort(vec.begin(),vec.end());
long long ans=0;
for(int x=T-N;x<=T;x++){
ans+=(long long)x*(long long)vec[x-T+N].first+(long long)vec[x-T+N].second;
}
cout<<ans;
}
'PS > boj' 카테고리의 다른 글
백준 11689 GCD(n, k) = 1 (0) | 2022.07.21 |
---|---|
백준 15659 연산자 끼워놓기 (3) (0) | 2022.07.20 |
백준 22985 문자열 조작의 달인 (0) | 2022.07.18 |
백준 15559 내 선물을 받아줘 (0) | 2022.07.17 |
백준 2069 보이는 산맥 (C++) (0) | 2022.07.15 |