私はここでDPベースの問題に関するDumitruによるこの優れたチュートリアルを読んでいます。そして、私は1DDP問題のリストに記載されているFlowerGarden問題に対するDPベースのアプローチを考え出そうとしています。
私は、最初に花を順番に並べ替えてから、問題で言及されているさまざまな条件チェックに基づいて花を並べ替える、非DPソリューションしか考えられません。それはDPとして分類されませんね。
社説もDPについては何も言及していません。誰かが、万が一、この問題に対する適切なDPベースのソリューションを教えてもらえますか?
ありがとう!
編集:
リンクに登録が必要だとは思いませんでした。これが問題です:
問題の説明あなたは一年中あなたに楽しい花を与えるために球根で花畑を植えています。ただし、花が見える間は他の花を遮らないように花を植えたいと考えています。
int []の高さ、int []のブルーム、およびint[]のしおれが与えられます。花の種類ごとに、高さ、花、しおれの同じインデックスの要素で表されます。高さは各種類の花の成長の高さを表し、花は各種類の花が地面から湧き出る朝を表し、しおれは各種類の花が縮んで枯れる夜を表します。Bloomとwiltの各要素は、1から365までの数値になり、wilt[i]は常にbloom[i]より大きくなります。同じ種類の花をすべて一列に並べて見せる必要があります。また、できるだけ高い花をできるだけ前方に配置する必要があります。ただし、花の種類が他の種類よりも背が高く、両方の種類が同時に地面から離れることができる場合は、ブロッキングを防ぐために、背の高い花の前に背の低い花を植える必要があります。朝は花が咲き、夕方はしおれますので、同じ日に花が咲いても、もう一方の花がしおれていても、片方がもう片方を塞ぐことができます。
上記の目標を達成するために花を植える順序で、高さの要素を含むint[]を返す必要があります。庭の正面は、戻り値の最初の要素で表され、庭を見る場所です。高さの要素はすべて一意であるため、常に明確な順序があります。
2つ編集:
例1:
height = {5,4,3,2,1}
Bloom = {1,1,1,1,1}
wilt = {365,365,365,365,365}
戻り値:{1、2、3、4、5}
これらの花はすべて1月1日に咲き、12月31日にしおれます。それらはすべて互いにブロックする可能性があるため、短いものから高いものの順に並べる必要があります。
例2:
h = {5,4,3,2,1}
b = {1,5,10,15,20}
w = {4,9,14,19,24}
戻り値:{5、4、3、2、1}同じ花のセットがすべて別々の時間に咲くようになりました。それらは互いにブロックすることはないので、最も高いものから最も短いものの順に並べて、最も高いものをできるだけ前方に配置することができます。
例3:height = {5,4,3,2,1}
Bloom = {1,5,10,15,20}
wilt = {5,10,14,20,25}
戻り値:{3、4、5、1、2}ここでの違いは、3番目のタイプの花は4番目の花の開花より1日早くしおれることです。したがって、最初に高さ3の花、次に高さ4の花、次に高さ5の花、最後に高さ1と2の花を配置できます。最初に高さ1の花を注文することもできますが、そうではありません。その結果、庭で可能な最大の高さが最初になります。