Untitled
unknown
plain_text
2 years ago
1.8 kB
2
Indexable
#include <iostream> using namespace std; #define maxn 51 int n, ans; int adv[3][2]; int client[maxn][2]; int visa[3]; int jav[3][2]; void imports(){ cin >> n; for(int i = 0; i < 3; i++){ cin >> adv[i][0]; } for(int i = 0; i < 3; i++){ cin >> adv[i][1]; } for(int i = 0; i < n; i++){ for(int j = 0; j < 2; j++){ cin >> client[i][j]; } } } void reset(){ for(int i = 0; i < 3; i++){ visa[i] = 0; for(int j = 0; j < 2; j++){ adv[i][j] = 0; jav[i][j] = 0; } } for(int i = 0; i < maxn; i++){ for(int j = 0; j < 2; j++){ client[i][j] = 0; } } } bool check_pos(int a, int pos){ int end = pos + adv[a][0]; for(int i = 0; i < 3; i++){ if(pos < jav[i][0] && end > jav[i][0]) return false; if(pos > jav[i][0] && pos < jav[i][1]) return false; if(end > jav[i][0] && end < jav[i][1]) return false; } return true; } void backtrack(int qc){ if( qc == 3){ int sum = 0; for(int i = 0; i < n; i++){ int point = 0; int start = client[i][0]; int end = client[i][0] + client[i][1] ; for(int j = 0; j < 3; j ++){ if(start <= jav[j][0] && end >= jav[j][1] && adv[j][1] >= point){ point = adv[j][1]; } } sum += point; } if( sum > ans){ ans = sum; } return; } for(int i = 1; i <= 50; i++){ if(check_pos(qc, i)){ jav[qc][0] = i; jav[qc][1] = i + adv[qc][0]; backtrack(qc + 1); jav[qc][0] = 0; jav[qc][1] = 0; } } } void exports(int tc){ ans = 0; backtrack(0); cout << "Case #" << tc << endl; cout << ans << endl; } int main(){ freopen("input.txt","r",stdin); int t; cin >> t; for(int tc = 1; tc <= t; tc++){ reset(); imports(); exports(tc); } return 0; }
Editor is loading...