プラン(ナップザック問題、DP)

 

6月ニンニク長い時間が私は海外に行きたかった、そして今、彼は、彼らが学校のために適用する必要があるので、すべての材料を準備する準備を、必要なすべての試験を完了しました。海外の任意の大学のために適用するには、あなたが適用する料金を支払う必要があり、これは非常に印象的です。ニンニクの王は多くのお金を持っていなかった、我々は唯一のn百万の合計を救いました。彼は、m個の学校で(彼の手頃な価格の範囲内で当然の)の数を選択します。各学校では、彼は学校の申し出にBの可能性を得た推定異なる申請料(百万ドル)、そしてニンニク王を持っています。

オファーは別の学校間でお互いに影響を与えないかどうか。「私はオファーをNEED」、と彼は叫びました。貧しい人々を助け、助け、彼は彼が少なくとも一つのオファーの最大確率を受けることができることを計算します。(あなたが複数のニンニク6月の学校を選択した場合は、任意のオファーの学校ができ得ます)。

入力形式

最初の行は2つの正の整数N、M(0≤n≤10000,0≤m≤10000)を有しています。

m行の後ろに、各行は二つのデータAは、I(整数)、B I(実数)を示すi番目のアプリケーション料や学校は、確率を得るために提供することができます。

出力フォーマット

ジュンニンニクを表す出力するデータ対応の各セットは、少なくとも一つの最大確率を提供することができます。1つの小数点以下の場所に正確な割合として表現。

サンプル入力

10  3 
4  0.1 
4  0.2 
5  0.3

サンプル出力

44.0

 

01ナップザック問題

ここでは、01とバックパックの伝達方程式の前になり、状態遷移方程式のステータスを変更します。

DPは、[j]は、少なくともあなたは学校の確率プランを取得することができ、コストJの元を表します。

学校が提供を取得するためにXドルを費やしているという可能性がある場合はyです。この時間は1.0-(1- DP [JX])*(1-Y)であるので、試験に合格する第1の確率、少なくとも学校の確率に収容されているその補数を計算します。

状態遷移方程式:

DP [J] = MAX(DP [J]、1.0-(1- DP [JX])*(1-Y))

 

 

1の#include <stdio.hの>
 2の#include < ストリング・H>
 3の#include <iostreamの>
 4の#include < ストリング >
 5の#include <math.h>の
 6の#include <アルゴリズム>
 7の#include <ベクトル>
 8#含む<スタック>
 9の#include <キュー>
 10の#include < セット >
 11の#include <地図>
 12の#include <sstream提供さ>
 13の#include <ctimeの>
 14  のconst  int型 INF = 0x3f3f3f3f 15のtypedef 長いです ロングLL;
16  CONST  INT MOD = 1E9 + 9 17  CONST LL MOD = 1E9 + 7 18  CONST  ダブル PI = ACOS( - 1 )。
19の CONST  ダブル EPS = 1E- 8 20  の#defineバグCOUT << "---------------------" << ENDL
 21  CONST  INT MAXN = 1E5 + 10 22  使って 名前空間はstdを、
23  
24  のint A [ 10005 ]。
25  ダブル B [10005 ]。
26  二重 DP [ 10005 ]。
27   
28  のint main()の
 29  {
 30      の#ifdefデバッグ
 31      freopenは(" SAMPLE.TXT "" R " 、STDIN)。
32      #endifの
33  //     ios_base :: sync_with_stdio(偽);
34  //     cin.tie(NULL)。
35      
36      整数N、M。
37      のscanf(" %D%D "、&​​N、&M)。
38      のためのint型iは= 1 ; I <= M; I ++ 39          のscanf(" %D%LF "、および[I]、&B [I])。
40      のためにINTは iは= 1 ; I <; I ++ = M 41      {
 42          のためにINT J = N; J> = [I]; j-- 43              DP [J] = MAX(DP [J]、1.0 - (1 -dp [JA [I]])*(1 - B [I]))。
44      }
 45      のprintf(" %.1f %% \ n "、DP [N] * 100 )。
46      
47     リターン 0 ;
48 }

 

 

 

 

 

 

-

おすすめ

転載: www.cnblogs.com/jiamian/p/12218841.html