隣接するコインを選択せずに最大化
6878 ワード
お金を探す問題と同様に、動的な割り当てを使用して解決することができます.
public class Main
{
public static int func(int[] coin)
{
int[] ans = new int[coin.length];
ans[1] = coin[1];
ans[2] = Math.max(coin[1], coin[2]);
for (int i = 3; i<coin.length; i++)
{
ans[i] = Math.max(ans[i-1], ans[i-2] + coin[i]);
}
return ans[ans.length-1];
}
public static void main(String[] args)
{ // 편의를 위해 첫 원소를 0으로 함
int[] coin = {0,5,1,2,10, 6, 3, 8, 1, 11, 14};
System.out.println(func(coin));
}
}
隣接する2つの硬貨を選択できないため、例えば6個の硬貨の中で最大値を取らなければならない場合、5個の硬貨の中の最大値の結果、あるいは4個の硬貨の中の最大値の結果+6個の硬貨のようにdpで解決することができる.ans[i] = Math.max(ans[i-1], ans[i-2] + coin[i])
Reference
この問題について(隣接するコインを選択せずに最大化), 我々は、より多くの情報をここで見つけました https://velog.io/@bluesun147/이웃한-동전을-선택하지-않고-최대로-가져가기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol