Branched Evolution

Competitive Programming in Python

プレゼントの当選者を決定する問題を最小費用流で解く

問題

$ m $ 人の応募者と $n$ 個の商品があり、応募者 $i$ の商品 $j$ に対する希望度 $A _ {ij} \geq 0$ が定まっている。商品 $j$ は $L _ j > 0$ 個しかなく、$1$ 人の応募者に $2$ 個以上の商品が当選することはないとする。 また、希望度が $0$ の商品に当選することはないとする。つまり、$X _ {ij} = 1, 0$ で応募者 $i$ が商品 $j$ に当選したかしなかったかを表すとすると、$X _ {ij}$ は $$\sum _ {j = 1} ^ {n} X _ {ij} \leq 1$$ $$ \sum _ {i = 1} ^ {m} X _ {ij} \leq L _ {ij}$$ $$A _ {ij} = 0 \Rightarrow X _ {ij} = 0$$ をみたす。 このとき、当選者の希望度の合計 $ \displaystyle \sum _ {i = 1} ^ {m} \sum _ {j = 1} ^ {n} A _ {ij} X _ {ij} $ を最大化するように、各商品の当選者を決定せよ。

Read more

Introduction to Heuristics Contest

問題

26種類のコンテストを365日間にわたって1日1種類ずつ開催する。$i$ 日目にコンテスト $j$ を開催したとき $S _ {ij}$ の満足度を得て、コンテスト $j$ を開催しなければ $C _ {j} \times (i - L _ {ij})$ の満足度を失う。ただし、$L _ {ij}$ は $i$ 日目までに $j$ を最後に開催した日とする。このとき、最終的な満足度をできるだけ大きくするような開催スケジュールを求めたい。($C _ {j} \leq 100, S _ {ij} \leq 20000$)

Read more

ABC 169 F - Knapsack for All Subsets

問題

長さ $n$ の数列 $A$ と自然数 $s$ が与えられる。$\{ 1, \ldots , n \}$ の部分集合 $T$ について、$f(T)$ を $T$ の部分集合 $\{i _ 1, \ldots , i _ k\}$ で $A _ {i _ 1} + \cdots + A _ {i _ k} = s$ をみたすものの個数とするとき、すべての $T$ に対する $f(T)$ の和を求めよ。($n,s,A _ i \leq 3000$)

Read more