본문 바로가기

BOJ/C++

(202)
최종순위 *위상정렬 *isPrev[][] 작년 등수가 더 높은 팀이 앞에 온 경우 (-1) / 뒤에 온 경우 (1) -> compareTo 의 반환값과 동일 *등수에 변화가 있으면 작년 등수가 더 높은 팀의 위상 배열을 ++ / 낮은 팀은 위상 배열을 -- 하여 등수에 변화를 준다. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while (t--) { int n, m; cin >> n; int prev[501] = { 0 }; for (int i = 1; i > prev[i]; } int isPrev[501][501] = { {0} }; int ..
욕심쟁이 판다 *현재 좌표는 항상 1일 (dp[][]을 1로 초기화한다) *현재 좌표에서 최대한 많이 갈 수 있는 날을 dp[][] 에 저장한다. #include #include #include #include using namespace std; int n; int map[501][501]; int dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 }; typedef pair pp; typedef pair ipp; int dp[501][501]; bool visited[501][501]; int dfs(int x, int y) { if (dp[x][y] != 1) return dp[x][y]; int &ret = dp[x][y]; for (int i = 0; i < 4; i++) { int n..
에너지모으기 *완전탐색 #include #include #include using namespace std; int n, ans = 0; bool picked[11]; int w[11]; void dfs(int size, int res) { if (size == n-2) { ans = ans > res ? ans : res; return; } for (int i = 1; i 0) left--; while (picked[right] && right < n - 1) right++; picked[i] = true; dfs(size + 1, res + w[left] * w[right]); picked[i] = false; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(..
두 동전 *두 동전이 모두 보드 바깥으로 나가는 경우 -> continue; *모두 보드안으로 이동하는 경우 -둘 다 벽인 경우 continue; -하나만 벽인 경우 -> 그 동전은 이동하지 않고 머무른다. #include #include #include #include #define INF 987654321 using namespace std; typedef struct Pos { int x, y; }; typedef struct Coin { //int cnt; Pos one; Pos two; }; int n, m; char map[21][21]; Pos coin1, coin2; int ans = INF; bool visited[21][21][21][21]; int dx[4] = { -1,0,0,1 }, dy[..
개똥벌레 #include #include #include #define MAXN 200001 #define MAXH 500001 using namespace std; int suk[MAXH], jong[MAXH], res[MAXH]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); //각 구간별로 장애물 개수를 센다. int n, h; cin >> n >> h; int cnts = 0, cntj = 0; for (int i = 0; i > tmp; if (i % 2 == 0) { //석순 suk[cnts++] = tmp; } else ..
달리기 *세그 트리 사용 #include #include #include #define MAXX 500001 using namespace std; typedef long long ll; typedef pair li; typedef pair ii; int n; int tree[MAXX]; li num[MAXX]; void update(int idx, int diff) { while(idx 0) { res += tree[idx]; idx -= (idx & -idx); } return res; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i > tmp; num[i].first = tmp; num[i].second ..
배열돌리기3 #include #include #include #include using namespace std; int n, m; int a[102][102], b[102][102]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, r; cin >> n >> m >> r; for (int i = 1; i a[i][j]; } } for (int d = 0; d > v; if (v == 1) { memset(b, 0, sizeof(b)); memcpy(b, a, sizeof(a)); //상하 반전 for (int i = 1; i
이동하기 #include #include #include using namespace std; int n, m; int map[1001][1001]; int dp[1001][1001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for (int i = 0; i > map[i][j]; } } dp[0][0] = map[0][0]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (i == 0 && j == 0) continue; else if (i == 0) { dp[i][j] = dp[..