私はここで解決策/コードを見つけました:時間の複雑さO(N ^ 2 logN)、空間の複雑さO(N)
解決策は、優先キューの助けによって実装されます。
逆の考え方は、コードを見て簡単に行うことができます。次の最小値と比較した後に最小合計が配列から削除され、新しい合計 - (i^3 + (j+1) ^3)。
直感的な証明は次のとおりです。
最初に、最小優先度キューに (1,1),(2,2),(3,3),...,(N,N) を追加しました。
a^+b^3=c^3+d^3 で、(a,b) が次に優先キューから取り出される最小値であるとします。このタクシー番号を検出できるようにするには、(c,d) も (a,b) の後に取り出される優先キューにある必要があります。
注: (a,b) を抽出した後に (a,b+1) を追加するため、(a,b) を抽出しても (c,d) が優先キューに追加されることはありません。プライオリティ キューにすでに存在している必要があります。
ここで、(c,d) がまだ優先キューに入っていないため、優先キューにないと仮定しましょう。代わりに、k>0 のプライオリティ キューに (c,d-k) がいくつかあります。
(a,b)を取り出しているので a^3+b^3≤c^3+(d−k)^3
ただし、a^3+b^3=c^3+d^3
したがって、
c^3+d^3≤c^3+(d−k)^3 d≤d−k k≤0
k > 0 なので、これは不可能です。したがって、私たちの仮定は決して実現することはできません。したがって、a^3+b^3=c^3+d の場合、最小 PQ から削除されるすべての (a,b) について、(c,d) は既に最小 PQ に含まれています (または削除されたばかりです)。 ^3