最小 - 最大とインクルージョン排除の推進と応用

コンセプト

最小・最大容量撥、また特定のセット、1例既知の最小で最大値又はシークアルゴリズムの他のために、ほとんどの反転と呼ばれます。

例えば:

$$ MAX(A、B)= + B分(A、B)\\\ MAX(A、B、C)= + B + C-分(A、B)-min(C) -min(B、C)+分(A、B、C)$$

明らかに、容易全て取る反対数の数が、最小値で最大値を選択する形で同じ式を有する式の最小の最大値を知ります。最低限で最大値を選択する方法の以下の説明。

フォーム

Maxは(S)$は$ S $の集合の最大値を表す$なお、$ MIN(S)$ $ S $は、最小セットを表し:
$$
MAX(S)= \ SUM \ limits_ {T \サブセットS、 T \ NEQ \ファイ}( - 1)^ {| T |} -1ミン(T)
$$

導出

(| T |)MIN(T)$ $ $マックス(S)= \和\ limits_ {T \サブセットS、T \ NEQの\ファイ} F関数f満足$の引数として設定されたサイズが提供されます。

Sの$の$ノート$ X_1、X_2、...、x_m $要素の順序を下げ、その後、$ X_I $、左の$ [I = 1] $への貢献、右側の貢献のために$ \和の\ limits_ {jは= 0} ^ {I-1}とF(j + 1)$ {I-1 \がjを選択します}。

式が成立する場合、それは確かに持っている$ [I = 1] = \合計\ limits_ {J = 0} ^ {私は-1} {私は-1 \選ぶJ} F(J + 1)$。

设$ F(I)= [I + 1 = 1] $($即[i = 1] = F(I-1)$)、$ G(I)=​​ F(I + 1)$、则$ F (I)= \和\ limits_ {J = 0} ^ {I} G(J)$ {iがjで選択\}。

二項反転$を与えるためにはG(I)=​​ \和\ limits_ {J = 0} ^ {I}( - 1)^ {IJ} F(J)=を{iがjで選択\}( - 1) ^私は$。

故の$ F(I)= G(I-1)=( - 1)^ {I-1} $。

このような構成の確立、その結果:
$$
MAX(S)= \ SUM \ limits_ {T \サブセットS、T \ NEQ \ファイ}( - 1)^ {| T |} -1ミン(T)
$$

別証明

右の方程式を検討し、その後、最小の$ $のX_Iと呼ばれます:

  • $ I = 1 $、$の寄付に$ 1。
  • 場合$ iが\ NEQ 1 $、$ X_1 $群から選択され、2つのオプションが選択されていない、これらの二つの溶液の係数は正反対番号に対応するので、$ 0 $の合計寄与しています。

したがって、右は$変数x_1 =マックス(S)$の合計です。

スプレッド

注$はKMAXは、(S)$次に、$ K $ $ $ Sの大きな値の集合を表す:
$$
Kmaxの(S)= \ SUM \ limits_ {T \サブセットS、| T | \ K} GE( - 1) {^ | T | -k} {| T | -1 \}最小を選択1-K(T)
$$

導出

(| T |)MIN(T)$関数を満たす$ G $ $ KMAX(S)= \和の\ limits_ {T \サブセットS、T \ NEQの\ファイ} gの引数として設定されたサイズが提供されます。

次に$ X_I $、左する$ [I = K] $への寄与、右側の寄与するための要素$ X_1、X_2、...、x_m $の順S $の$ノート、 $ \和の\ limits_ {jは= 0} ^ {I-1}にG(J + 1)$ {I-1 \がjを選択します}。

式が成立すれば、それは確かに有している$ [I = K] = \和\ limits_ {J = 0} ^ {I-1} {I-1 \選択J} G(J + 1)$。

设$ F(I)= [I + 1 = K]、$ G(I)=​​ G(i + 1)の$、则$ F($ [I = K] = F(I-1)$即)$を(I)= \和\ limits_ {J = 0} ^ {I} G(J)$ {iがjで選択\}。

二項反転$を与えるためにはG(I)=​​ \和\ limits_ {J = 0} ^ {I}( - 1)^ {IJ} F(J)=を{iがjで選択\}( - 1) ^ {I-K + 1} $ {私はK-1を選択してください\します}。

故の$ F(I)= G(I-1)=( - 1)^ {IK} $ {I-1 \は、K-1を選択}。

このような構成の確立、その結果:
$$
Kmaxの(S)= \ SUM \ limits_ {T \サブセットS、| T | \ K} GE( - 1)^ {| T | -k} {| T |が-1 \選択}最小1-K(T)
$$

アプリケーション

最小 - 最大としばしば問題、アプローチ「すべてが予定時刻に表示される」解決するために使用および除外のプロモーション:

ハチソン$ T_I $、その後、私は番目の要素を$ $の発生時間を示します。

  • $マックス(S)$、すなわち、すべての要素の最大時間、すなわち、すべての要素が時間表示され、発生し、$ $ $ T $ Sの最大値を表します。
  • $ MIN(S)$ Sは$ $ $ T $最小、すなわち、すべての要素の発生の最小時間、発生すなわち、少なくとも時間を表します。

$マックス(S)との最小・最大撥容量= \和\ limits_ {T \サブセットS、T \ NEQの\ファイ}( - 1)^ {| T | -1} MIN(T)$。

同時に、左と右により線形に、所望取る、所望のシンボルが直接内部、すなわち、$ E(MAX(S))= \和\ limits_ {T \サブセットS、T \ NEQの\ファイ}に加算することができる( - 1)^ {| T | -1} E(MIN(T))$。

少なくとも所望の時間の単位時間当たり少なくとも確率に見える$ P $、$ T $で$ T $は$ \ FRACの1P $として表示されたとき:$ E(MIN(T))$、それは非常に簡単に見つける見つけるのは簡単。

式したがって$マックス(S)$によって決定することができる、すなわち、すべての要素の所望の時間が表示されます。

同じ理由ミンKMAXの包含と除外のために。

書き込み

あなたがそれらに$マックス(U)$を依頼した場合、それは完全な作品の最大値であり、そして唯一のコーパスにそれぞれ自分の貢献度を計算する必要があります。

あなたはすべて$ Sの$ $マックス(S)$を要求する場合は、(満たされていないようだが)、より高速な方法ではなく、列挙のサブセットを使用してのビットで分割し、征服することです。2件の一般的な書き込みがありますが、彼らは簡単に方程式の形に加工することができます。

書きます

for(i = 1 ; i < (1 << n) ; i <<= 1)
    for(j = 0 ; j < (1 << n) ; j ++ )
        if(j & i)
            f[j] -= f[i];

{| S | - | T} $ - (1)^このとき、係数が$です。

書かれた2

for(i = 1 ; i < (1 << n) ; i <<= 1)
    for(j = 0 ; j < (1 << n) ; j ++ )
        if(j & i)
            f[j] = f[i] - f[j];

{| T |} $ - (1)^このとき、係数が$です。

[hdu4336]カードコレクター

効果の対象に

それぞれが購入の希望数を購入しようとしているように、カードの$ N $の種類があり、$のP_Iの$確率のそれぞれの購入は、私$種最初の$を買います。

$ 1 \ nは\ル$ 20

問題の解決策

包含および除外問題の最小 - 最大の基礎、上記の「アプリケーション」を参照してください。

この問題のために、$ MIN(S)がある= \ FRAC 1 {\和\ limits_ {iはP_I} Sで\} $、次いで最小・最大$撥容量があってもよい、式$を適用します。

時間複雑さの$ O(2 ^ n)の$。

#include <cstdio>
#define N 1100010
int cnt[N];
double p[N] , f[N];
int main()
{
    int n , i , j;
    double ans;
    while(~scanf("%d" , &n))
    {
        ans = 0;
        for(i = 0 ; i < n ; i ++ ) scanf("%lf" , &p[1 << i]);
        for(i = 1 ; i < (1 << n) ; i ++ ) f[i] = f[i - (i & (-i))] + p[i & (-i)] , cnt[i] = cnt[i - (i & -i)] + 1;
        for(i = 1 ; i < (1 << n) ; i ++ ) ans += ((cnt[i] & 1) ? 1 : -1) / f[i];
        printf("%lf\n" , ans);
    }
    return 0;
}

[Bzoj4036]ビットごとのOR

効果の対象に

あなたの最初のデジタル$ 0 $、各操作がランダムに$ [0,2 ^ N-1] $を選択しますあなたのデジタルビットごとのOR演算と数、$ I $ $ $ P_Iの数を選択する可能性があります。あなたはそれが所望の周波数と^ n-1個$動作2 $デジタルになり見つけます。

$ 1 \ nは\ル$ 20

問題の解決策

タイトルと同様の問題は、$分(S)を計算するために変換された$、一般的な(とは$ 0 $を撮影したもの)を持つすべての要素を取得する必要が$と$ Sは、$ P $の合計です。

$反して、すべての$ S $ $ 2 ^の、すなわち、$ S $の補数を共通の要素$ p個の$和を求めていない考慮難しい1-S N-Nセットのすべてのサブ$ pが$と、プレスを用いてビット分割統治を解決します。

最後に、あなたは以下の式を設定することができます。判決$ pが\のNEQ要素の0 $のビットがあるかどうかを判定することによって対処することがないソリューション。

時間の複雑さの$ O(n回2 ^ nと\)$。

コード

#include <cstdio>
#include <algorithm>
using namespace std;
double p[1100010];
int cnt[1100010];
int main()
{
    int n , i , j;
    double ans = 0;
    scanf("%d" , &n);
    for(i = 0 ; i < (1 << n) ; i ++ ) scanf("%lf" , &p[i]);
    for(i = 1 ; i < (1 << n) ; i ++ ) cnt[i] = cnt[i - (i & -i)] + 1;
    for(i = 1 ; i < (1 << n) ; i <<= 1)
    {
        for(j = 0 ; j < (1 << n) ; j ++ )
            if((j & i) && p[j])
                break;
        if(j == (1 << n))
        {
            puts("INF");
            return 0;
        }
    }
    for(i = 1 ; i < (1 << n) ; i <<= 1)
        for(j = 0 ; j < (1 << n) ; j ++ )
            if(j & i)
                p[j] += p[j ^ i];
    for(i = 1 ; i < (1 << n) ; i ++ ) ans += ((cnt[i] & 1) ? 1 : -1) / (1 - p[(1 << n) - 1 - i]);
    printf("%.8lf\n" , ans);
    return 0;
}

[Luogu4707]この世界に戻ります

効果の対象に

そこ単位時間当たり$ $ n型物質がランダム物質が生成され、$ I $物質の発生確率が$ \ FRAC {P_I} M $です。所望の時間$ kは$物質を得るために探しています。

$ 1000 \ $ 1 \ K 10,000 $、$ 1のM個の\ \ $ 1 \ K \ K $、$ P_I $为整数且$ \和\ limits_ {で= 1} ^ np_i = M $、$ NK \ $ 10

問題の解決策

$ kは$得られた物質は、包含と排除の問題に変換N-K + 1 $大きい第$の全て、最小-KMAXを得るのに必要な時間に相当します。便宜上、そう$ Q = N-K + 1 $、$ 1 \ルQ \ル11 $があります。

大規模な$ N $ $ $ 1000に、使用前に統計的手法のサブセット二つの質問は明らかに直接死ぬオフします。

考察:選択された番組の私達のセットがあるが$ 2 ^ N $種が、$の各MIN(S)$のみと$ \和\ limits_ P_Iの$ {iがSで\}、したがって、状態の数、実際にのみ$ Mの$種。

比較明白なアイデアが$ F_提供され、{I、Jを、lは} $私は$ $一緒に$ \和P =リットルの$プログラム番号を入れて、種を選択し、フロント$ J $物質を表しますが、データは、大きすぎますあなたはこの質問を渡すことはできません。

$ qを\ル11 $:これまでのところ、我々は一つの条件を使用していません。

考え、既知の$ F_ {I、J、L } 答えた後に計算$、投稿$( - 1)^ {JQ } {J-1 \選ぶのq-1} \回\ FRAC mlでの\時間F_ {I 、J、L} $。前のセクションのための、式の数の組み合わせの使用が持っている:
$$
(-1)^ {} {J-JQ 1選択-Q \ 1。。} =( - 1)^ {(1-J) - (1-Q)。 {2-J} \}選択してQ-2 - (1-J) - (1)^ {J-2 -q} {\選択-Q 1}
$$
と$ F_ {I、J、L } $ と転移の$ F_ {I、J、L } =のF_ {I-1、J、L} + F_ {I-1、J-1、L-P_I} $、 そう:
$$
(-1)^ {JQ } {J-1 \は、Qを選択 -1} F_ {I、J、L} =( - 1)^ {JQ} {J-1 \は、(+ Q-1} F_ {I-1、J、L}を選択します-1)^ {(J-1 ) - (Q-1)} {J-2 \選択Q-2} F_ {I-1、J-1、L-P_I} - ( - 1)^ {(J -1)} {-q 2-J \ Q-選択F_ {}。1. 1-I ,. 1-J、L-P_I}
$$
見つかりましたか?上記係数及びJ $ $ $ Qおよび$回答を用い、計算時間、したがってのみが$ G_ {I、J、L設け 、T}を$ Iは$ $種の$ Jの$、$の玉石を選択フロント物質を表します。 \和P =リットルの$、そして最終的に$ Q = T $のプログラムの数を乗じた係数を計算します。そこ:
$$
{G_ 1-I、J、L、T} G_ {I、J、L、T} = + {。。I-G_ 1 ,. 1-J、L-P_I、T - G_ 1} { 1-I ,. 1-J、L-P_I、T}
$$
私たちは努力を無駄にしているように見えるん。しかし、実際には、よく見ると一次元$ $ jを明らかに最終的な答えが$ jは$が必要になりますもはや有益な、それが転送されているかどうかではありません。

J $ $和の寸法について、H_ {I、L、Tが$ } $ Iは$ $選択フロントいくつかの物質を表し、一緒に$ \和P =リットル$、との最終的な計算を入れプログラムの数を乗じ$ Q = T $係数がある:
$$
H_ {I、L、Tは} = {H_-I 1、L、T} + {H_-I 1、L-P_I ,. 1-T。 I - H_ 1 {}、L-P_I、T}。
$$
最終的な答えは、$ \和の\ limits_ {I =であり回\ 1} ^ mh_ {N、I、Q} \ FRACのMIの$。

時間複雑$ O(NMQ)$は、スペース不足のために、我々は、スクロール配列を使用する必要があります。

コード

#include <cstdio>
#include <cstring>
#define mod 998244353
typedef long long ll;
ll p[1010] , f[2][10010][11];
inline ll qpow(ll x , ll y)
{
    ll ans = 1;
    while(y)
    {
        if(y & 1) ans = ans * x % mod;
        x = x * x % mod , y >>= 1;
    }
    return ans;
}
int main()
{
    int n , t , m , i , j , k , d;
    ll ans = 0;
    scanf("%d%d%d" , &n , &t , &m) , t = n - t + 1;
    for(i = 1 ; i <= n ; i ++ ) scanf("%lld" , &p[i]);
    for(i = 1 ; i <= t ; i ++ ) f[0][0][i] = -1;
    for(d = i = 1 ; i <= n ; i ++ , d ^= 1)
    {
        memcpy(f[d] , f[d ^ 1] , sizeof(f[d]));
        for(j = p[i] ; j <= m ; j ++ )
            for(k = 1 ; k <= t ; k ++ )
                f[d][j][k] = (f[d][j][k] + f[d ^ 1][j - p[i]][k - 1] - f[d ^ 1][j - p[i]][k] + mod) % mod;
    }
    for(i = 1 ; i <= m ; i ++ ) ans = (ans + f[n & 1][i][t] * m % mod * qpow(i , mod - 2)) % mod;
    printf("%lld\n" , ans);
    return 0;
}

おすすめ

転載: www.cnblogs.com/GXZlegend/p/11563330.html