HDU - 4283
説明
あなたのようなテレビ番組は1つが非常に親しまれてきています。まだ独身です男の子のニーズを満たすために、TJUTはショー自体を保持します。ショーは小ホールで保留され、それは男の子と女の子の多くを引き付けます。今すぐに登録するn個の男の子がある。
初めに、n個の男の子は、行に立って、一つのステージ1に行きます。しかし、監督は突然、少年がステージにk番目一度であれば非常に少年は、diaosi Dの値を持っていることを知っている彼は待つ必要があるため、彼の不幸は、(K-1)*はDになります( K-1)人。
幸いにも、小ホールで暗い部屋があり、そのディレクターは、一時的に暗い部屋の中に少年を入れて、彼の前にステージに彼の行くの背後に男の子をさせることができます。暗い部屋のために最初の暗い部屋に入る少年が最後を残してあり、非常に狭いです。
ディレクターは、暗い部屋で男の子の順序を変更したいので、不幸の概要は以上になります。あなたは彼を助けることはできますか?
入力
最初の行は、単一の整数T、テストケースの数を含んでいます。各場合について、最初の行(0 <N <= 100)nは
次のn行がD1-Dnは少年のdiaosi(0 <=ディ<= 100)の値を意味する整数nは
出力
各テストケースについて、出力不幸の少なくとも概要。
問題の意味:
あるnは個人が電源に来て、誰もが値を持っています。誰かが、D * k番目が権力を握った、彼はは(K-1)に等しい幸せではないです、今、同じ部屋のスタックがある場合は、ステージや待合室に彼を聞かせするために皆のために、誰もがない頼みます幸せな最小値。
アイデア:
間隔DPを意味し、DP配列は、IからJの個人に幸せな最小値ではありません。
戦略は、間隔のためのものである[Iは、J] iは、I + 1からIまで、スタックの原理によれば、次に、k番目のプレイであると仮定人が+ K-1人は、I + kから私の前に再生されていますjは、個々の私を再生することです。
DP [I] [J] =分(DP [I]、[J]、DP [I + 1] [I + K-1] + DP [I + K] [J] +(K-1)* D [ I] +(和[J] -sum [I + K-1])* K)、
I + K jののでこのセクションで後述するため、それぞれの個々のインサートの前方の人に、各不幸値複数++を持っているので、バックの前に少数の人々は、いくつかを取るために合計しなければならない挿入します。
コード
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 長い長いLLのtypedef。 INT和[110]、[110]、DP [110] [110]。 INTメイン() { T INT。 CIN >> T; 用(INT T = 1; T <= T、T ++){ int型のn; cinを>> N; memsetの(DP、0、はsizeof(DP))。 memset(和、0、はsizeof(合計))。 以下のために(INT I 1 =; I <= N; I ++){ CIN >> [I]。 和[I] =和[I-1] + [I]。 } のための(int型のk = 1; nはK <; K ++){ ため(INT I 1 =、J = + K; J <= N; I ++、J ++){ DP [I] [J] = 1E7 + 5。 用(int型、D = 1; D <= K + 1; D ++){ DP [I] [J] =分(DP [I]、[J]、DP [I + 1] [I + D-1] + DP [I + D] [J] +(D-1)* [ I] +(和[J] -sum [I + D-1])* D)。 } } } COUT << "ケース#" << T << ":" << DP [1]〜[N] << '\ n'は、 } 0を返します。 }
----------------
CSDNリンクします。https://blog.csdn.net/weixin_43880627/article/details/103623666