본문 바로가기

알고리즘 관련/BOJ

BOJ)14226 이모티콘

문제: icpc.me/14226


이모티콘에 대한 연산이 주어질 때 이모티콘 S개를 치기 위해 필요한 시간의 최솟값을 구하는 문제이다.


화면에 존재하는 이모티콘을 복사해서 붙여넣는 경우는 2의 시간이 이모티콘 하나를 삭제하는 경우는 1의 시간이 걸린다 생각하고 다익스트라를 돌렸는데 WA를 계속 받았다.


문제 조건을 잘 확인해보니 한번 복사한 이모티콘을 여러번 붙여넣을 수 있는 것같았다.


그래서 다익스트라에서 pq의 3번째 인자로 붙여넣었을 경우의 붙여넣은 수를 인자로 주어 붙여넣기 하였을 경우 다시 붙여넣을 수 있게 소스를 수정하여 맞았다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
int dp[2010], s;
int main() {
    memset(dp, -1sizeof(dp));
    scanf("%d"&s);
    priority_queue<pair<int, pair<intint>>> pq;
    pq.push({ 0,{1,0} });
    while (pq.size()) {
        int here = pq.top().second.first;
        int cost = -pq.top().first;
        int b = pq.top().second.second;
        pq.pop();
        if (b)
            if (< here + b&&here + b < 2010)
                pq.push({ -cost - 1,{ here + b,b } });
        if (dp[here] != -1)continue;
        dp[here] = cost;
        if (s == here)break;
        if (< here - && here - < 2010 && dp[here - 1== -1)
            pq.push({ -cost - 1,{ here - ,} });
        if (< * here && * here < 2010 && dp[* here] == -1)
            pq.push({ -cost - 2,{ * here,here } });
    }
    printf("%d\n", dp[s]);
    return 0;
}
 
cs



'알고리즘 관련 > BOJ' 카테고리의 다른 글

BOJ)10090 Counting Inversions  (0) 2017.02.15
BOJ)2262 토너먼트 만들기  (0) 2017.02.15
BOJ)5398 틀렸습니다  (0) 2017.02.11
BOJ)10266 시계 사진들  (0) 2017.02.08
BOJ)1305 광고  (0) 2017.02.08