4753:[Jsoi2016]ベストグループ
制限時間:20秒 メモリ制限:512メガバイトの提出:2003 解決:790
[ 送信 ] [ ステータス ] [ 議論 ]
説明
JSOIインフォマティクスは、1からNの番号にN候補の合計、これらの候補者をチーム。利便性は、JYY数は0です。各候補率います
彼の推奨候補R以下ませんありません。Riを= 0は、候補者がJYY自分の空想であることを示している場合。調和のとれたチームを確保するために、JYYはそれを確認する必要があり、
募集の候補者は、私は、その後、候補Riが、「確かに、チームに必要がある場合。もちろん、チームには常に自分自身をJYY。各候補者は持っています
パイの戦闘値は「募集費Siのもあります」。K JYYは、費用対効果の高いチームを形成するために、(JYY所有していない)の候補者を募集したいと考えています。
すなわち、Kとの戦いの合計値の比率は、合計最大の総コストでJYYリクルート候補を選択しました。
入力
入力行は、2つの正の整数KとNを含んでいます
i番目の行は三つの整数Siの、パイが含まれている次のNライン、は、R iは、採用候補者の費用、戦いと人々の推奨数を表します。
データを満たし1≤K≤N≤2500,0< "はSi、PI" ≤10^4,0≤Ri<私の100%に
出力
出力ライン実数、最高の比率。小数点以下3桁への回答。
サンプル入力
1 2
1000年1 0
1〜1000 1
1000年1 0
1〜1000 1
サンプル出力
0.001
ソリューション:
これは、道路に水の問題を見始めている問題であり、質問、古典的なO $です汚れの木(N- ^ 2
)$の木のバックパックが、この質問は、2つの異なる要素の移動で、そしてこの2つの要素間の関係は、和の単純比ではなく作られ、シフトはそれぞれ2を考えるようになったが、これらの2は、通常の方法を維持することはできません、彼が選択したのと同じものです、次いで、どのくらいの時間のために考えました転送と非常に良好な転写、新しいチーズポイントの必要性を発見したオープンラベルが見つかりました:、私は見てオンラインビットを学び、01ポイント計画が、彼はqwqああではないでしょうが、一対の概要を説明し、それは非常に困難であるとは思いません。
01スコアの計画:
01計画スコア、単純な用語は、いくつかのタプルはタプルの数から$(S_I、P_I)$を、選択することで、$ \シグマ{S_I} / \ {シグマP_I} $の最大値(最小値)は。
この問題は、溶液の一般的なクラスであり、我々は$ X = \シグマ{S_I} / \シグマ{P_I} $最大(最小)値を仮定し、$ X * \シグマ{P_I} = \シグマ{S_Iがあります} $、すなわち$ \シグマ{S_I} -x * \シグマ{P_I} = 0 $。それは、xの特定の値が上記式を満たす場合、それが所望の値です。私たちは、これが半分答えすることができ、列挙と思う......しかし、その後、再び、それについて考えることができます。
だから我々は、上記の式> 0、少し答えを示し、<0はその後、答えは大きいですので、あなたが計算することができたときに、答えの半分を指示します。
まあ、実際には、この質問は、Word 01得点を計画し、$(N ^ 2)Oの$リュック裸木のタイトルであることを事前にチーズ解決は、また、注目すべきで初期化の問題で、特に注意がそれぞれということです答えを与えるために、後半は配列の初期値DP、DPの事実を添付する必要があり、各チェックは、xのDP値の配列である配列です。彼は、彼が選択して、人の合計数には含まれませんので、++ kをしなければならないと言うので、最後に、そのタイトルに注意してください。
複雑さの$ O(N ^ 2logn)$、しばしばややカード、luogu O2を開くには合計時間。
Sahuaエンド。
1の#include <iostreamの> 2の#include <アルゴリズム> 3の#include <CStringの> 4の#include <cstdioを> 5の#include <cmath> 6の#include <ベクトル> 7の#include <キュー> 8の#include <cstdlib> 9 使用 名前空間はstd; 10 のconst int型 N = 2505 。 11の CONST ダブル EPS = 1E- 5 。 12 INT第[N]、[N << NEX 1 ]、[N <<に1 ]、TOT。 13 INT VIS [N]、サイズ[N]。 14 int型N、K。 15 int型ATT [N]、CO [N]、RI [N]。 16 二重TerStegen [N]。 17 二重F [N]、[N]。 18 ボイド追加(int型、int型 B){[++ TOT]最初= B、NEX [TOT] = [A]、最初の[A] =に、TOT} 19の 空隙 DFS(INT X){ 20 VIS [X ] = 1 ;サイズ[X] = 1 。 21 F [X] [ 1 ] = TerStegen [X]。// 22 のための(int型 ;私は= =最初のI [X] {NEX [I]) 23 のint Y = [I]に、 24 // IF(VIS [Y])続けます。// danxiangbian 25の DFS(Y)。 26 のために(INT ; J> = J =分(サイズ[X]、K)1 ; j--)のための(int型 L =分(サイズ[Y]、k)が、L> = 1 ; l--)F [X] [L + J] = MAX([X] [L + J] F [Y] [L] + F [X] [j]をf)は、// dayudengyu1? 27 サイズ[X] + = サイズ[Y]。 28 } 29 } 30 int型チェック(ダブルMID){ 31 INT チュ。 32 のために(int型 I = 0を I <=。2501 ; I ++)のための(INT J = 0 ; J <= 2501 ; J ++)F [i]は[J] = - 88484848 。 33 // のmemset(F、0xcf、はsizeof(F))。 34 のためには、(int型私= 0 ; iがn = <; iは++)F [i]が[ 0 ] = 0.0 。 35 のために(int型 I = 0を TerStegen [I] = iが++; iが<= N)1.0 - * ATT [I] 1.0 *ミッド* 1.0 * CO [I]。 36の DFS(0 )。 37 // COUT << [0] [K] << ENDL F。 38 もし(F [ 0 ] [K]> = 0)チュ= 1 。 39 他のチュ= 0 ; 40 リターンチュ。 41 } 42 INT メイン(){ 43 のscanf(" %D%dの"、&K&N) 44 K ++。// duliu 45 のための(int型 I = 1 ; ++; iが<= N I){ 46 (scanfの" %D%D%D "、&CO [i]は、&ATT [I]、および[I] RI)。 47 追加(RI [i]は、I)。 48 } 49 ダブル L = 0.0、R = 2E7 * 1.0 。 50の ダブルANS; 51 一方、(L + EPS < R){ 52 ダブルミッド=(L + R)/ 2 。 53 // COUT <<中間<< " "<< L <<"" << R << ENDL。 54 であれば(チェック(MID))L = ミッド。 55 他の R = ミッド; 56 } 57 のprintf(" %の.3lf "、(L + R)/ 2 )。 58 }