TopCoder SRM 659 Div1 Easy: ApplesAndOrangesEasy(貪欲法)
解法
前からフルーツを見ていって、そのフルーツからKの範囲内にリンゴがK/2個以内なら、そのフルーツをリンゴにしても良い。
コード
public class ApplesAndOrangesEasy { public int maximumApples(int N, int K, int[] info) { boolean[] isApple = new boolean[N]; for (int i = 0; i < info.length; i++) { isApple[info[i] - 1] = true; } final int canBeContain = K / 2; for (int i = 0; i < N; i++) { boolean containable = true; for (int start = Math.max(0, i - K + 1); start <= i; start++) { int cnt = 0; for (int j = 0; j < K && start + j < N; j++) { if (isApple[start + j]) { cnt++; } if (cnt == canBeContain) { containable = false; break; } } if (!containable) { break; } } if (containable) { isApple[i] = true; } } int ans = 0; for (int i = 0; i < isApple.length; i++) { if (isApple[i]) { ans++; } } return ans; } }