다이나믹프로그래밍(DP)
백준 2916번: 자와 각도기
cepiloth
2018. 10. 21. 17:25
반응형
https://www.acmicpc.net/problem/2916
1. 문제
2. 알고리즘
키워드 - DP
- 접근법
0 과 입력 받은, 각도도 만들수 있는 각으로 해야한다.
만들어진 각도를 재활용 하여 다른 각도도 만들 수 있다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <iostream> #include <sstream> #include <string> #include <algorithm> #include <functional> #include <vector> #include <list> #include <queue> #include <deque> #include <map> #include <set> #include <stack> #include <math.h> #include <memory.h> using namespace std; #define MAX_SIZE 100 #define INF 0x7fffffff #define CENDL "\n" #define ll long long #define c_reverse(s) reverse(s.begin(), s.end()) #define c_sort(s) sort(s.begin(), s.end()) #define print_vector(v) for(int i=0; i<v.size(); i++) cout << v[i]; bool table[361]; int main() { cin.tie(0); std::ios::sync_with_stdio(false); int n, k; cin >> n >> k; table[0] = true; for (int i=0; i<n; i ++) { int d = 0; cin >> d; for (int j = 0; j<360; j++) { if (!table[j]) continue; for (int k = 1; k<360; k++){ table[(j + k*d) % 360] = table[(360 * 360 + j - k*d) % 360] = true; } } } for (int i=0; i<k; i++) { int d; cin >> d; if (table[d]) { cout << "YES" << CENDL; } else { cout << "NO" << CENDL; } } return 0; } | cs |
반응형