SRM 520 div1 easy: SRMCodingPhase
SRM 520 にちょっとだけ参加しました。easy だけささっと解いて yukicoder 参加です。あとで med も解きたいと思います。
解法
easy と med で luck を使う時間を全探索して,それでいてかつ解く順番も全探索して最大値を求めるだけ。
class SRMCodingPhase { public: int countScore(vector <int> points, vector <int> skills, int luck) { int ans = 0; vector<int> lucks(3); vector<int> minus(3); minus[0] = 2; minus[1] = 4; minus[2] = 8; for (lucks[0] = 0; lucks[0] <= luck; lucks[0]++) { for (lucks[1] = 0; lucks[1] <= luck-lucks[0]; lucks[1]++) { lucks[2] = min(luck - lucks[0] - lucks[1], skills[2]-1); bool ng = false; for (int i = 0; i < 3; i++) { if (lucks[i] >= skills[i]) ng = true; } if (ng) continue; vector<int> perm(3); for (int i = 0; i < 3; i++) perm[i] = i; do { int t = 0; int score = 0; for (int i = 0; i < 3; i++) { t += skills[perm[i]]-lucks[perm[i]]; if (t <= 75) score += points[perm[i]] - minus[perm[i]] * (skills[perm[i]]-lucks[perm[i]]); } ans = max(ans, score); } while (next_permutation(perm.begin(), perm.end())); } } return ans; } };