C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

TopCoder SRM609: PackingBallsDiv2

variety set の個数を固定すると、same set の個数が一意に求められる。
そして variety set の候補は、0 から max(R,G,B) で高々 101 通りなので、それらを全て試す。

public class PackingBallsDiv2 {
    public int minPacks(int R, int G, int B) {
        int ans = 100;

        for (int i = 100; i >= 0; i--) {
            int r = R - i;
            int g = G - i;
            int b = B - i;
            int sub = i;
            if (r > 0) sub += (r - 1) / 3 + 1;
            if (g > 0) sub += (g - 1) / 3 + 1;
            if (b > 0) sub += (b - 1) / 3 + 1;
            ans = Math.Min(ans, sub);
        }

        return ans;
    }
}