DP for C++
void dfs(int s, int e, int p, int q)
{
if (s > e) return;
int m = (s+e)>>1, opt;
D[m] = 1e18;
for (int k=p;k<=q&&k lld v = E[k] + (lld)(m-k-1)*(S[m]-S[k]);
if (D[m] > v)
D[m] = v, opt = k;
}
dfs(s, m-1, p, opt);
dfs(m+1, e, opt, q);
}
출처: http://blog.myungwoo.kr/96 [PS 이야기]
문제 : https://icpc.baylor.edu/download/worldfinals/problems/icpc2016.pdf
출처 맨 밑에 문제 해설이랑 C++ 코드 있습니다
이 코드를 C에서 동작하도록 바꾸고있는데
int m = (s+e)>>1, opt;
이 라인부터가 이해가 안되는데 비트이동연산자가 왜 갑자기 나오는건지
dfs함수가 어떻게 해서 그룹 코스트를 최소로 하는 값을 찾아내주는지 동작 방식좀 알려주시면 감사하겠습니다
그리고 지금 C로 작성한 코드는 graph의 사이즈를 그냥 크게 잡아놓고 priority queue랑 vector 부분 빼고 돌렸는데, C++코드에서는 vector랑 priority queue를 이용하더라구요...
최적화 하기 위해서 C에서 vector랑 priority queue를 구현해야할까요... 다른 방법은 없을까요?
이것땜에 다른거 아무것도 못하고 미치겠습니다 ㅠㅠ 도움좀 부탁드립니다...
void dfs(int s, int e, int p, int q)
{
if (s > e) return;
int m = (s+e)>>1, opt;
D[m] = 1e18;
for (int k=p;k<=q&&k lld v = E[k] + (lld)(m-k-1)*(S[m]-S[k]);
if (D[m] > v)
D[m] = v, opt = k;
}
dfs(s, m-1, p, opt);
dfs(m+1, e, opt, q);
}
출처: http://blog.myungwoo.kr/96 [PS 이야기]
문제 : https://icpc.baylor.edu/download/worldfinals/problems/icpc2016.pdf
출처 맨 밑에 문제 해설이랑 C++ 코드 있습니다
이 코드를 C에서 동작하도록 바꾸고있는데
int m = (s+e)>>1, opt;
이 라인부터가 이해가 안되는데 비트이동연산자가 왜 갑자기 나오는건지
dfs함수가 어떻게 해서 그룹 코스트를 최소로 하는 값을 찾아내주는지 동작 방식좀 알려주시면 감사하겠습니다
그리고 지금 C로 작성한 코드는 graph의 사이즈를 그냥 크게 잡아놓고 priority queue랑 vector 부분 빼고 돌렸는데, C++코드에서는 vector랑 priority queue를 이용하더라구요...
최적화 하기 위해서 C에서 vector랑 priority queue를 구현해야할까요... 다른 방법은 없을까요?
이것땜에 다른거 아무것도 못하고 미치겠습니다 ㅠㅠ 도움좀 부탁드립니다...
모바일이라 코드 하이라이터 씹히네 흑
수정하려하면 이상해지네요 글이.. 2016 world finals B Branch Assignment 문제입니다
여기 말구 백준 게시판이나 슬랙 가셔서 질문 하시는게 빠를듯 합니다
스택오버플로 가면 답변 5분컷임
그걸 C로 구현하겠다는건 미친짓이니까 일찌감치 포기해라. 그게 벡터보다 더 최적이라는 보장도 없음 ㅇㅇ