氏ロビンソンは多くのことを名前のペットの猿を持っています。その日、突然、国の道路に沿って歩いている二人は、道端の看板に貼り付けられた紙の小片が見つかりました:「私は自由に試飲ピーナッツ種を歓迎-単語を負い!」
氏ロビンソンと非常に満足の多くは、ピーナッツが自分の好きなので。看板の後ろに、道端には本当にきちんと長方形のグリッドに配置されたピーナッツフィールドピーナッツ工場を持っています。経験豊富な一見の多くは、それらのそれぞれどのくらいのピーナッツ植物でピーナッツがあります。ようにと、ほとんどのピーナッツは、ピーナッツがそれを選ぶためにどこその後、植物の残りの部分を見つけ、あなたが最初にピーナッツを選択する最大のピーナッツ植物を見つける」:算術演算の多くを訓練するためには、氏ロビンソンは言いましたしかし、あなたは私の限られた時間の中で道路の側に戻って行かなければならない」。
私たちは、時間の各ユニットでの多くは、あなたが1で、次の4つのことを行うことができますことを前提としています
(縁石への道最も近い側からジャンプする1すなわちピーナッツ植物植物の、最初の行)、
これ全ての植物の周りに隣接する他の1つの植物から2.ジャンプ;
ピーナッツ工場でピッキング3;
4.最も近いストリートから(すなわちピーナッツ植物の木の最初の行)が戻って道端にジャンプします。
今ピーナッツとピーナッツフィールドの大きさの分布を与え、どのように多くのピーナッツの多くを拾うために、限られた時間のために頼みますか?
ピーナッツ植物の唯一のいくつかは、これらの異なるにおけるピーナッツ植物の数を想定し、以下育つことに注意してください。例えば、落花生フィールド(3,7)、(4,2)、(5,4)、(2,5)のみ位置ピーナツ植物が成長の、それぞれ13、7、15、9の数。37のピーナッツに取りのみ(4,2)、(2,5)、(5,4)後に多くの時間における21個の単位、。
説明を入力します。
データの複数のセットを含む入力、データの各行は最初の三つの整数M(1≤M≤20)、N(1≤N≤20含む ) 空間によって分離し、K(0≤K≤1000)を、ピーナッツを表しますフィールドサイズはM * N、多くの時間は、時間のKピーナッツマイニング単位として定義されています。
次いで、M行、スペースで区切られた自然数N P(0≤P≤500)を含む各行;ピーナッツピーナッツ植物のフィールドの数を表し、0(なしピーナッツ)に加えて、他のすべてのピーナツ植物の数同じではありません。
出力説明:
限られた時間内に出力の整数、すなわち、対応するデータの各セットは、ピーナッツのロット番号をピックアップします。
インポート java.utilのクラス*。; パブリック クラスメイン{ 公共 静的 ボイドメイン(文字列[]引数){ int型M、N-、K、 スキャナーS = 新しい新しいスキャナ(System.in); M = s.nextInt(); // 行 N-s.nextInt =(); // 列 K = s.nextInt(); // 単位時間 // 最初ピーナッツ植物を見つける のHashMap <整数、ピーナッツ>ピーナッツ= 新しい新規のHashMap <> (); のための(INT 0 = I、IはM <; I ++は){ 用(のInt J = 0; J <N-; J ++ ){ int型 AMOUNT = s.nextInt(); IF(AMOUNT> 0 ) peanut.put(AMOUNT、新しい新しいピーナッツ(M、N - 、AMOUNT)); } } // 次いでピーナツ植物は数によって並べ替えられて コンパレータ<整数> = CMP 新しい新しいコンパレータ<整数> (){ @Override 公共 のint (整数1整数、整数integer2に)を比較{ 返す -整数1 ; integer2にする } ;} のArrayList<整数> =一覧新しい新規のArrayList <>(peanut.keySet()); // セット番号ピーナッツを除去 IF (list.isEmpty()) のSystem.out.println( 0 ); 他{ Collections.sort(リスト、CMP) ; int型のインデックス= 0 ; int型キー= List.get(インデックス++ ); // ピーナッツの分析を採取することができます // ピーナッツ植物の最大数を取得 ピーナッツノード= peanut.get(キー); int型ヴァル= 0; // 選ぶことができますピーナッツの量を格納する変数を作成 // 、狩りの時間を移動時間を計算し、出発時刻 のint。+ = node.x. 1 moveTime、takeTime = 1、leavlTime = node.x + 1 ; // 分析を選ぶことができ 、一方を(K - moveTime - takeTime - leavlTime> = 0 ){ //は、走行時間を減算し、取り出すことができます時間ピッキング K = Kを- moveTime - takeTime; // ピーナッツピッキングの累積数 ヴァル+ = node.amountを; // 次の植物かどうかを決定する IF(インデックス> =はlist.size())ブレーク; //は、次を得ます植物 ピーナッツNEXTNODE = peanut.get(List.get(インデックス++ )); // 次の植物に移動する時間を取得します。 = Math.abs moveTime(node.x - nextNode.x) + Math.abs(node.y - nextNode.yが); // 次の植物から出発時刻を取得します 。leavlTime = nextNode.x + 1 ; ノード = NEXTNODE。 } } } } クラスピーナッツ{ int型のX、Y、AMOUNT; ラッカセイ(INT X、INT Y、int型AMOUNT){ この .X = X; この .Y = Y; この .amount = AMOUNT。 } }
私は一日のほとんどは、最終的にはギャングコードを描画すると思います。ここでは、テストケースが問題のように見えるのです、どのようにすべてが合格しない.....