[2016 JSOI]ベストグループ(01ツリーバックパック端数プログラミング)

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

サンプル出力

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 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/leom10/p/11440330.html