제2회 대학생 프로그래밍 온라인대회 연습문제 B 테이블 정리 2014-05-02 ProgrammingAlgorithm Algorithm, Programming 문제소스코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include <iostream>using namespace std;int tables[4][4]; // 테이블 상태int Move(int, int);int main(){ int T; cin >> T; // 테스트 케이스의 개수 for(int i = 0; i < T; i++) { int sum = 0; for(int j = 0; j < 4; j++) { for(int k = 0; k < 4; k++) { cin >> tables[j][k]; sum += tables[j][k]; } } cout << sum - Move(0, 0) << endl; } return 0;}int Move(int col, int flag){ if(col >= 4) { return 0; } int max = 0; for(int i = 0; i < 4; i++) { if(flag & (1 << i)) { continue; } int val = tables[i][col] + Move(col + 1, flag | (1 << i)); if(val > max) { max = val; } } return max;} 코멘트실수로 배열에 행과 열을 반대로 저장해 푸는데 오래걸렸다. 가장 적게 이동한 인원을 찾는것과 전체 인원에서 이동안한 인원을 제외한 인원이 같기에 후자로 구하였다. 재귀적으로 백트래킹을 수행하였다. Newer 제2회 대학생 프로그래밍 온라인대회 연습문제 A 소수 판정 Older ACM ICPC 2000 ASIA Practice Problem B Cross a Creek