본문 바로가기

알고리즘90

BOJ 11994 - Circular Barn Revisited (dp) https://www.acmicpc.net/problem/11994 dp식은 대충짜지 말자고 다짐한 문제 최대 100개의 칸으로 나뉜 원형 헛간이 있다. 각 칸마다 외부로 통하는 문이 있고 양 옆 칸으로 이동하는 문이 있다. 외부에서 내부로 통하는 문을 지나는데는 비용이 들지 않는다. 옆 칸으로 이동할 때 반드시 시계방향으로 움직여야 하고 지나간 문의 수의 제곱만큼의 비용이 든다. 현재는 소들이 모두 외부에 있고, 최대 k개의 외부 문을 열어서 각 칸에 소가 정확히 ri마리씩 들어가도록 하고 싶다. 이 때 최소 비용을 구해라. ... (구간합 때문에 1base로 구현함) 당연히 시계방향 기준으로 뒤에 있는 소가 앞에 있는 소를 추월하는 것은 최적이 아니다. 0번 문을 처음으로 열어 줄 때~ n-1번 문을.. 2020. 2. 7.
BOJ 12013 - 248게임 (dp) https://www.acmicpc.net/problem/12013 dp[i][j] : 구간[i,j]~~ 40이하의 자연수가 최대 248개 주어진다. 인접한 두 수가 같다면 1을 더한 값으로 합칠 수 있다. (7,7,1->8,1) 더이상 합칠 수 없을 때까지 합친 후에 남아있는 수 중 가장 큰 수의 최대값을 구해라. dp[i][j] : i~j를 합할때 남아있는 수 중 가장 큰 수. dp[i][i]=a[i] dp[i][j] =if(dp[i][k]==dp[k+1][j]) max ( dp[i][k]+1; ) i~j간격 1부터 차례로 갱신해야 하는 것에 주의. for문의 가장 바깥에 해당하는 것이 간격임. (코드의 sz) 모든 d중 최대값이 정답 #include #include #include #include .. 2020. 2. 7.
BOJ 12011 - Splitting the field (세그트리) https://www.acmicpc.net/problem/12011 작년 중순에 동아리에서 소개해줬던 문제. 최대 5만마리의 소들의 좌표가 주어질때, 이 소들을 하나의 펜스에 딱 맞도록 다 들어가도록 할때 그 영억의 넓이 big과 두 영역으로 펜스를 나눠 넣을때 두 영역의 합 small에 대해 big-small의 최소값을 구해라. (좌표 범위 최대 1e9) 한 영역의 크기는 (ymax-ymn)*(xmax-xmn)이다. 펜스가 나눠지는 모양은 다음과 같이 네가지 경우 뿐이다. 1,2번의 경우, x좌표 기준으로 오름차순 정렬한 후 다음과 같이 구할 수 있다. 3,4번의 경우, y좌표 기준으로 오름차순 정렬한 후, 같은 방법으로 구할 수 있다. 구간[l,r] y값 최대, y값 최소, x값 최대, x값 최소를 .. 2020. 2. 7.
Educational codeforces #81 div2 D - Same GCDs (피함수, 수론) https://codeforces.com/contest/1295/problem/D B풀다가 시간 다가버린 참교육 라운드 1 > a >> m; m /= gcd(a, m); ll phi = m; for (ll i = 2; i * i 2020. 1. 30.