레야몬
[C++] 1007번 벡터 매칭 - 수학, 브루트포스 본문
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#define FOR(i, k, N) for(int i=k; i<=N; i++)
#define MAX_N 21
#define X first
#define Y second
#define INF 987654321
using namespace std;
typedef long long ll;
int T, N; //테스트 케이스의 개수 T, 점의 개수 N
double sum; //최소 거리
vector<pair<int, int>> loc;
void f(int n, int s, int us, ll vx, ll vy)
{
if(n==N+1) sum = min(sum, sqrt(vx*vx+vy*vy));
if(s<N/2) f(n+1, s+1, us, vx+loc[n].X, vy+loc[n].Y); //2개 중 하나 선택
if(us<N/2) f(n+1, s, us+1, vx-loc[n].X, vy-loc[n].Y);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout.precision(30);
cin >> T;
while(T--) {
sum=INF;
cin >> N;
loc.push_back({0, 0});
FOR(i, 1, N) {
int x, y; cin >> x >> y;
loc.push_back({x, y});
}
f(1, 0, 0, 0, 0);
cout << sum << '\n';
loc.clear();
}
return 0;
}
<알고리즘>
- 벡터들의 합은 좌표의 합으로 나타낼 수 있다.
- N개중 N/2를 시작점 N/2를 종점으로 하자.
<cout 소수점 정하는 법>
cout을 써서 출력할 때 `double`전체를 프린트하고 싶어요
제가 밑의 소스코드를 실행하면 3.14159265358979가 아니라 3.14159로 나오는데 이렇게 소수점에서 반올림한 거 말고 전체 값이 다 나오게 하려면 어떻게 해야 되돼나요? 소스코드 int main(){ double d = 3.14
hashcode.co.kr
※현재 고등학교 등교 중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고 있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C++] 6549번 히스토그램에서 가장 큰 직사각형 - 자료 구조, 세그먼트 트리, 분할 정복, 스택 (0) | 2022.10.12 |
---|---|
[C++] 3176번 도로 네트워크 - 자료 구조, 트리, 최소 공통 조상, 희소 배열 (0) | 2022.10.11 |
[C++] 1761번 정점들의 거리 - 트리, 최소 공통 조상, 희소 배열 (0) | 2022.10.06 |
[C++] 2533번 사회망 서비스(SNS) - 트리, DP (0) | 2022.10.06 |
[C++] 2618번 경찰차 - DP (0) | 2022.10.05 |
Comments