Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
AI
Uploaded by
AtCoder Inc.
PDF, PPTX
24,098 views
abc032
AtCoder Beginner Contest 032 解説
Education
◦
Read more
7
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 44
2
/ 44
3
/ 44
4
/ 44
5
/ 44
6
/ 44
7
/ 44
8
/ 44
9
/ 44
10
/ 44
11
/ 44
12
/ 44
13
/ 44
14
/ 44
15
/ 44
16
/ 44
17
/ 44
18
/ 44
19
/ 44
20
/ 44
21
/ 44
22
/ 44
23
/ 44
24
/ 44
25
/ 44
26
/ 44
27
/ 44
28
/ 44
29
/ 44
30
/ 44
31
/ 44
32
/ 44
33
/ 44
34
/ 44
35
/ 44
36
/ 44
37
/ 44
38
/ 44
39
/ 44
40
/ 44
41
/ 44
42
/ 44
43
/ 44
44
/ 44
More Related Content
PDF
AtCoder Regular Contest 043 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 045 解説
by
AtCoder Inc.
PDF
abc027
by
AtCoder Inc.
PDF
AtCoder Regular Contest 048
by
AtCoder Inc.
PDF
AtCoder Regular Contest 019 解説
by
AtCoder Inc.
PDF
DDPC 2016 予選 解説
by
AtCoder Inc.
PDF
Seminar on Quantum Computation & Quantum Information part19
by
Yuichi Adachi
PPTX
AtCoder Beginner Contest 014 解説
by
AtCoder Inc.
AtCoder Regular Contest 043 解説
by
AtCoder Inc.
AtCoder Regular Contest 045 解説
by
AtCoder Inc.
abc027
by
AtCoder Inc.
AtCoder Regular Contest 048
by
AtCoder Inc.
AtCoder Regular Contest 019 解説
by
AtCoder Inc.
DDPC 2016 予選 解説
by
AtCoder Inc.
Seminar on Quantum Computation & Quantum Information part19
by
Yuichi Adachi
AtCoder Beginner Contest 014 解説
by
AtCoder Inc.
What's hot
PDF
AtCoder Beginner Contest 023 解説
by
AtCoder Inc.
PDF
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
PDF
巨大数スライドWeb用
by
__sappy__
PDF
AtCoder Regular Contest 021 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 025 解説
by
AtCoder Inc.
PDF
ロマ数16 simizut
by
Tatsuki SHIMIZU
PDF
AtCoder Beginner Contest 017 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 018 解説
by
AtCoder Inc.
PDF
最大流 (max flow)
by
HCPC: 北海道大学競技プログラミングサークル
PDF
PRML_titech 8.1 - 8.2
by
Takafumi Sakakibara
PDF
研究室内PRML勉強会 8章1節
by
Koji Matsuda
PDF
PRML 8.2 条件付き独立性
by
sleepy_yoshi
PDF
UTPC2012 - K
by
omeometo
PDF
Indeedなう B日程 解説
by
AtCoder Inc.
PPTX
mathemaical_notation
by
Kenta Oono
PDF
公開鍵暗号2: NP困難性
by
Joe Suzuki
PDF
AtCoder Regular Contest 046
by
AtCoder Inc.
PDF
AtCoder Regular Contest 036 解説
by
AtCoder Inc.
PDF
Infer net wk77_110613-1523
by
Wataru Kishimoto
PPTX
写像の基本性質
by
政孝 鍋島
AtCoder Beginner Contest 023 解説
by
AtCoder Inc.
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
巨大数スライドWeb用
by
__sappy__
AtCoder Regular Contest 021 解説
by
AtCoder Inc.
AtCoder Beginner Contest 025 解説
by
AtCoder Inc.
ロマ数16 simizut
by
Tatsuki SHIMIZU
AtCoder Beginner Contest 017 解説
by
AtCoder Inc.
AtCoder Beginner Contest 018 解説
by
AtCoder Inc.
最大流 (max flow)
by
HCPC: 北海道大学競技プログラミングサークル
PRML_titech 8.1 - 8.2
by
Takafumi Sakakibara
研究室内PRML勉強会 8章1節
by
Koji Matsuda
PRML 8.2 条件付き独立性
by
sleepy_yoshi
UTPC2012 - K
by
omeometo
Indeedなう B日程 解説
by
AtCoder Inc.
mathemaical_notation
by
Kenta Oono
公開鍵暗号2: NP困難性
by
Joe Suzuki
AtCoder Regular Contest 046
by
AtCoder Inc.
AtCoder Regular Contest 036 解説
by
AtCoder Inc.
Infer net wk77_110613-1523
by
Wataru Kishimoto
写像の基本性質
by
政孝 鍋島
Similar to abc032
PPT
Algorithm 速いアルゴリズムを書くための基礎
by
Kenji Otsuka
PDF
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
PDF
Sec15 dynamic programming
by
Keisuke OTAKI
PDF
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
PDF
プログラミングコンテストでの動的計画法
by
Takuya Akiba
PDF
アルゴリズムのお勉強 ダイクストラ
by
hixi365
PDF
AtCoder Beginner Contest 011 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 008 解説
by
AtCoder Inc.
PDF
Divisor
by
oupc
PPTX
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
PDF
Code Formula 予選B 解説
by
AtCoder Inc.
PDF
SuperCon2015予選1級
by
winjii
PDF
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 017
by
AtCoder Inc.
PDF
Sort
by
oupc
PDF
130323 slide all
by
ikea0064
PDF
Abc009
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 009 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
PPTX
Arc 010 d
by
Yuma Inoue
Algorithm 速いアルゴリズムを書くための基礎
by
Kenji Otsuka
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
Sec15 dynamic programming
by
Keisuke OTAKI
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
プログラミングコンテストでの動的計画法
by
Takuya Akiba
アルゴリズムのお勉強 ダイクストラ
by
hixi365
AtCoder Beginner Contest 011 解説
by
AtCoder Inc.
AtCoder Beginner Contest 008 解説
by
AtCoder Inc.
Divisor
by
oupc
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
Code Formula 予選B 解説
by
AtCoder Inc.
SuperCon2015予選1級
by
winjii
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
AtCoder Regular Contest 017
by
AtCoder Inc.
Sort
by
oupc
130323 slide all
by
ikea0064
Abc009
by
AtCoder Inc.
AtCoder Beginner Contest 009 解説
by
AtCoder Inc.
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
Arc 010 d
by
Yuma Inoue
More from AtCoder Inc.
PDF
Square869120 contest #2
by
AtCoder Inc.
PDF
AtCoder Regular Contest 049 解説
by
AtCoder Inc.
PDF
Chokudai Contest 001
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 030 解説
by
AtCoder Inc.
PDF
arc047
by
AtCoder Inc.
PDF
abc031
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 028 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 029 解説
by
AtCoder Inc.
PPTX
AtCoderに毎回参加したくなる仕組み
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 033 解説
by
AtCoder Inc.
PDF
天下一プログラマーコンテスト2015 予選B 解説
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 予選A 解説
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 沖縄ツアー 解説
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 予選B 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 044 解説
by
AtCoder Inc.
PDF
MUJINプログラミングチャレンジ2016 解説
by
AtCoder Inc.
PPTX
TCO2017R1
by
AtCoder Inc.
PDF
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
by
AtCoder Inc.
Square869120 contest #2
by
AtCoder Inc.
AtCoder Regular Contest 049 解説
by
AtCoder Inc.
Chokudai Contest 001
by
AtCoder Inc.
AtCoder Beginner Contest 030 解説
by
AtCoder Inc.
arc047
by
AtCoder Inc.
abc031
by
AtCoder Inc.
AtCoder Beginner Contest 028 解説
by
AtCoder Inc.
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
AtCoder Beginner Contest 029 解説
by
AtCoder Inc.
AtCoderに毎回参加したくなる仕組み
by
AtCoder Inc.
CODE FESTIVAL 2015 解説
by
AtCoder Inc.
AtCoder Beginner Contest 033 解説
by
AtCoder Inc.
天下一プログラマーコンテスト2015 予選B 解説
by
AtCoder Inc.
CODE FESTIVAL 2015 予選A 解説
by
AtCoder Inc.
CODE FESTIVAL 2015 沖縄ツアー 解説
by
AtCoder Inc.
CODE FESTIVAL 2015 予選B 解説
by
AtCoder Inc.
AtCoder Regular Contest 044 解説
by
AtCoder Inc.
MUJINプログラミングチャレンジ2016 解説
by
AtCoder Inc.
TCO2017R1
by
AtCoder Inc.
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
by
AtCoder Inc.
abc032
1.
ABC 032 解説 三上和馬(@kyuridenamida) 1
2.
A - 高橋君と青木君の好きな数 2
3.
問題概要 • 整数 𝑎,
𝑏, 𝑛(1 ≦ 𝑎, 𝑏 ≦ 100, 𝑛 ≦ 20000) が与えられる. • aとbの公倍数で,n以上で最小のものを求めよ. • 例) a=2,b=3,n=8 → 12 (n以上で最小の,2と3の公倍数は12) 3
4.
解法 • 与えられたnを,aとbの両方で割り切れるようになるまで愚直にイン クリメントして,割り切れたらそれを出力. • 高々a*b-1回インクリメントすればそのような数は見つかるので, 時間計算量は
O(ab) で間に合う. 4
5.
別解 • まず𝑎と𝑏の最大公約数gcd(𝑎, 𝑏)をユークリッドの互除法で求める. •
そして𝑎と𝑏の最小公倍数lcm 𝑎, 𝑏 = a𝑏 gcd(𝑎,𝑏) を求めてから, lcm 𝑎, 𝑏 ∗ 𝑛 lcm 𝑎, 𝑏 を切り上げたもの • を計算するとそれが答え. • この方法だとn,a,bが大きくても解けるが今回は必要ない. 5 [余談] 一般に 𝑎 𝑏 の切り上げは, 𝑎+𝑏−1 𝑏 を整数で計算すると求まる
6.
B -高橋君とパスワード 6
7.
問題概要 • 文字列sに含まれる長さkの部分文字列で相異なるものの数を数えよ. • 1≦|s|,k≦300 •
例) s=“abcabc”,k=2→ 答え3 (∵ {”ab”,”bc”,”ca”}の3通りがありうる) 7
8.
解法 • 存在する長さkの部分文字列をすべて列挙したリストを作ってから, 重複を取り除き,その個数を出力する. • 重複を取り除く方法はいろいろあるが,多くの言語に存在するset型など の集合型を用いると,簡単に重複を取り除くことができる. •
計算量は集合型の実装方法に依存する. • 平衡二分木による実装の場合 𝑂( 𝑠 2 log |𝑠|) • 平衡二分木による実装の場合 𝑂 𝑠 2 ※文字列比較のオーダーはO(|𝑠|)なことに注意 • 集合型を用わず,列挙したリストに対して二重ループで愚直に重複除去 を行っても,𝑂( 𝑆 3 )程度の計算量で解ける. 8
9.
C – 列 9
10.
C - 列 •
長さNの非負整数列𝑆 = 𝑠1, 𝑠2, … , 𝑠 𝑁と整数Kが与えられる. • Sの連続する部分列𝑠𝑖, 𝑠𝑖+1, … , 𝑠𝑗のうち,条件 𝑘=𝑖 𝑗 𝑠 𝑘 ≤ 𝐾 を満たす部分列で最長のものの長さを求めよ. • 条件を満たす部分列が存在しない時は0を出力 • 1 ≦ N ≦ 105 , 0 ≦ 𝑠𝑖, 𝐾 ≦ 109 10
11.
例 • S={4,3,1,1,2,10},K=6 →
答え 4 • S={10,10,10,10,0,10},K=10 → 答え 6 • S={10,10,10,10,10,10},K=9 → 答え 0 • S={1,2,3,4},K=0 → 答え 0
12.
考察 [数列に1つでも0という値が含まれているケース] • 答えはN [それ以外のケース] • ありうる部分列の左端を全通り試すことを考える. •
その上で右端を全通り試していたら間に合わなさそう…? • 右端を少しずつ伸ばし要素の積がKを超えた時点で打ち切れば良い? • 全ての要素が2以上だったら右端の候補としてありうるのはlog2 𝐾通りくらい • なぜなら1つ要素が増えるごとに2倍以上になっていき,すぐKを超えるから • しかし,連続した1があると右端の候補数がO(N)になってしまう. • 連続した1を圧縮すれば良さそう! 12
13.
考察 - 連続した1を圧縮する •
圧縮例 S = {2,3,3,1,1,1,1,2,1,1,1} → {2,3,3,(1が4コ),2,(1が3コ)} • このようにすると,右端を少しずつ伸ばしていく際,連続した1の部分 は一気に伸ばすことができる. • 最悪ケースはS={1,2,1,2,1,2,1…}というふうなケースだが, しかしこの場合でも各左端から高々 2 log2 𝐾 コ程度しか候補が無い. 13
14.
解法 • 数列を圧縮する • 圧縮後の数列に対し,全左端から要素の積がKを超えない範囲で右 端を少しずつ伸ばしていくという方法で全通り試す. •
時間計算量 O(N log K) • しかしもっと汎用的で計算量も少ない解法がある 14
15.
別解① – 尺取法 •
この問題は尺取法で解くことができる. • 尺取法とは一次元配列に対して,左端と右端の2つのインデックスを持って片方を 進めたりして解を求める手法. • 以下のように尺取法を行うと,”全体で”O(N)の時間計算量で解ける. 1. 今の左端(初期は1番目)に対して,要素の積がK以下の間,出来るだけ右端を伸 ばす. 2. 今の区間の長さが解より大きければ解を更新 3. 伸ばせなくなったら1つ左端を右に動かす(=縮める).ただし左端を動かせないな ら終了. 4. 1に戻る • 左端が右端を追い越さないように注意して実装すること. • 実装は開区間で持つのが良いと思われる 15
16.
尺取法のイメージ •以下のケースを考える •S={1,2,10,3,3,1,2}, K=9 16
17.
尺取法のイメージ ①最初の状態 [左端,右端)=[1番目,1番目) ※開区間です S={1,2,10,3,3,1,2}, K=9 17
18.
尺取法のイメージ ②伸ばせるだけ伸ばす [左端,右端)=[1番目,3番目) S={1,2,10,3,3,1,2}, K=9 18
19.
尺取法のイメージ ①左を1つ進める [左端,右端)=[2番目,3番目) S={1,2,10,3,3,1,2}, K=9 19
20.
尺取法のイメージ ②伸ばせるだけ伸ば..せない [左端,右端)=[2番目,3番目) S={1,2,10,3,3,1,2}, K=9 20
21.
尺取法のイメージ ①左を1つ進める [左端,右端)=[3番目,3番目) S={1,2,10,3,3,1,2}, K=9 21
22.
尺取法のイメージ ②伸ばせるだけ伸ば..せない [左端,右端)=[3番目,3番目) S={1,2,10,3,3,1,2}, K=9 22
23.
尺取法のイメージ ①左を1つ進める(※左が右端を追い越すので右端も進める) [左端,右端)=[4番目,4番目) S={1,2,10,3,3,1,2}, K=9 23
24.
尺取法のイメージ ②伸ばせるだけ伸ばす [左端,右端)=[4番目,7番目) S={1,2,10,3,3,1,2}, K=9 24
25.
尺取法のイメージ ①左を1つ進める [左端,右端)=[5番目,7番目) S={1,2,10,3,3,1,2}, K=9 25
26.
尺取法のイメージ ②伸ばせるだけ伸ばす [左端,右端)=[5番目,8番目) S={1,2,10,3,3,1,2}, K=9 26
27.
尺取法のイメージ ①左を1つ進める [左端,右端)=[6番目,8番目) S={1,2,10,3,3,1,2}, K=9 27
28.
尺取法のイメージ ②伸ばせるだけ伸ば..せない [左端,右端)=[6番目,8番目) S={1,2,10,3,3,1,2}, K=9 28
29.
尺取法のイメージ ①左を1つ進める [左端,右端)=[7番目,8番目) S={1,2,10,3,3,1,2}, K=9 29
30.
尺取法のイメージ ②伸ばせるだけ伸ば..せない [左端,右端)=[7番目,8番目) S={1,2,10,3,3,1,2}, K=9 30
31.
尺取法のイメージ ③結局最長は3だとわかる S={1,2,10,3,3,1,2}, K=9 31
32.
別解② – logを取って和の問題に帰着 •
入力の対数を取ると,和の問題に帰着できるので,累積和と二分探 索を用いて解ける. • ただし,誤差に気をつける必要がある. • 詳細は省略 32
33.
D –ナップサック問題 33
34.
問題概要 • 以下のような0/1ナップサック問題を解いてください. • N個の荷物があって,それぞれの荷物には価値と重さが割り当てられている. •
重さの総和がW以下となるように荷物を選ぶとき,価値を最大化してください. • ただし, A) Nが30以下のケース B) 全ての荷物の価値が1000以下のケース C) 全ての荷物の重みが1000以下のケース • の少なくともの1つが成り立つケースしかデータセットに存在しない. • 1 ≦ 𝑁 ≦ 200 • 1 ≦ 荷物の価値𝑣𝑖, 荷物の重み𝑤𝑖 ≦ 109 • 1 ≦ 𝑊 ≦ 109 34
35.
はじめに • ナップサック問題は,動的計画法(DP)を用いる例題としてとても有名 • 聞いたことがない人は,本やインターネットに図解が溢れかえっているので 是非調べてみましょう •
今回は文章だけです. • ナップサック問題は, • 重さの和や価値の和に関して上限がないとき →NP困難問題として有名で,多項式時間では解けない • 重さの和や価値の和に制約があるとき →計算量がそれらの値に依存する擬多項式時間アルゴリズムがある (よくあるDPのことです) 35
36.
考察 • 各データセット毎に場合分けして解く他ない. A) Nが30以下のケース →
DPは困難∧愚直な全列挙は難しい(枝刈り探索なら通るかも..?) B) 全ての荷物の価値が1000以下のケース → DPできる C)全ての荷物の重みが1000以下のケース →DPできる • それぞれについて考える 36
37.
考察&解法 (A) Nが30以下のケース •
価値・重みに制約が無いため動的計画法は困難 • 𝑂(2 𝑁)で全列挙は間に合わなさそう. • 与えられた荷物の集合を半分ずつの集合A,Bに分けて,それぞれの 集合で組み合わせを全列挙し,それらの結果をうまくマージすると, 𝑂(2 𝑁 2 ∗ log 𝑆)程度の計算量で解ける(𝑆 = 2 𝑁 2 とする). • そのために,まず集合Aに対して,重さの和𝑥以下で達成できる最大価値を 𝑂(log 𝑆)程度で求めれるようにしておく必要がある. • S通りある(重みの和,価値の和)のペアを辞書順ソートして,重みに対して価 値が単調増加するようにリストを作っておけば二分探索できる. • その後,集合Bのある組み合わせを試して,その組み合わせを使った後余る 重みを集合Aに割り振る.この時達成できる最大価値を先ほどのリストに対 する二分探索等で高速に求める. 37
38.
アルゴリズムの流れ (A) Nが30以下のケース ①
荷物を2つの集合に分ける (𝑣1 = 5, 𝑤1 = 2) (𝑣2 = 4, 𝑤2 = 3) (𝑣3 = 1, 𝑤3 = 1) (𝑣4 = 2, 𝑤4 = 2) (𝑣1 = 5, 𝑤1 = 2) (𝑣2 = 4, 𝑤2 = 3) (𝑣3 = 1, 𝑤3 = 1) (𝑣4 = 2, 𝑤4 = 2) A B 全体 38
39.
アルゴリズムの流れ (A) Nが30以下のケース ②
Aの全組み合わせを計算してリストを作り,明らかに損するもの(そ れ未満の重みで,それ以上の価値を達成するものがある組み合わ せ)を取り除く. (𝑣1 = 5, 𝑤1 = 2) (𝑣2 = 4, 𝑤2 = 3) A (v=0,w=0) (v=5,w=2) (v=4,w=3) (v=9,w=5) 重みでソート済みのリスト この例では 全4通り計算 (v=0,w=0) (v=5,w=2) (v=9,w=5) 要らないものを削除 得られたリスト 39
40.
アルゴリズムの流れ (A) Nが30以下のケース ③
Bの全組み合わせに対して,先ほど計算したリストのどの要素と くっつければ良いかを,重みに対する二分探索で計算し,マージする 例)ナップサックのサイズが5の場合を考えると以下のようになる (v=0,w=0) (v=1,w=1) (v=2,w=2) (v=3,w=3) この例では 全4通り計算 (v=0,w=0) (v=5,w=2) (v=9,w=5) (𝑣3 = 1, 𝑤3 = 1) (𝑣4 = 2, 𝑤4 = 2) B 集合Aから得たリスト 40
41.
考察&解法 (B)荷物の価値が1000以下 • 𝑉
𝑀𝐴𝑋 = 1000とおくと,価値の総和は高々 𝑁 ∗ 𝑉 𝑀𝐴𝑋(= 20万) 以下. • 価値に対して重みを最小化するDPができる. • 𝑑𝑝[𝑖][𝑗] ∶= 𝑖番目のアイテム(𝑖 = 1. . 𝑁)まで使って,価値の和jを達成す る重みの和の最小値 と定義すると,以下の漸化式を計算すれば解ける • 𝑑𝑝[0][0] = 0, 𝑑𝑝[0][1. . 𝑁𝑉 𝑀𝐴𝑋] = ∞ • 𝑑𝑝[𝑖][𝑗] = min(𝑑𝑝[𝑖 − 1][𝑗], 𝑑𝑝[𝑖 − 1][𝑗 − 𝑣𝑖] + 𝑤𝑖(但し𝑗 − 𝑣𝑖 ≧ 0の時) ) • この漸化式を𝑖 = 0. . 𝑁に対して計算した後,重みの和が 𝑊 以下となる 最大の価値をテーブルを参照して求めれば良い. 41
42.
考察&解法 (B)荷物の価値が1000以下 • 実は,価値の逆順に更新ループを行うと,テーブルのサイズが 𝑂(𝑁𝑉
𝑀𝐴𝑋)で済み,添字iについて考慮しなくてよくなる.実装も軽い. • 時間計算量は 𝑂(𝑁2 𝑉 𝑀𝐴𝑋) 空間計算量は 𝑂 𝑁𝑉 𝑀𝐴𝑋 配列𝑑𝑝[0. . 𝑁][0. . 𝑁𝑉 𝑀𝐴𝑋]を用意 𝐹𝑜𝑟 𝑖 = 1. . 𝑁𝑉 𝑀𝐴𝑋 𝑑𝑝 0 𝑖 = ∞ 𝑑𝑝[0][0] = 0 𝐹𝑜𝑟 𝑖 = 1. . 𝑛 𝐹𝑜𝑟 𝑗 = 0 . . (𝑣𝑖 − 1) 𝑑𝑝[𝑖][𝑗] = 𝑑𝑝[𝑖 − 1][𝑗]; 𝐹𝑜𝑟 𝑗 = 𝑣𝑖 . . 𝑁𝑉 𝑀𝐴𝑋 𝑑𝑝[𝑖][𝑗] = min(𝑑𝑝[𝑖 − 1][𝑗], 𝑑𝑝[𝑖 − 1][𝑗 − 𝑣𝑖] + 𝑤𝑖) 配列𝑑𝑝[0. . 𝑁𝑉 𝑀𝐴𝑋]を用意 𝐹𝑜𝑟 𝑖 = 1. . 𝑁𝑉 𝑀𝐴𝑋 𝑑𝑝[𝑖] = ∞ 𝑑𝑝[0] = 0 𝐹𝑜𝑟 𝑖 = 1. . 𝑛 𝐹𝑜𝑟 𝑗 = 𝑁𝑉 𝑀𝐴𝑋 . . 𝑣𝑖 (※逆順) 𝑑𝑝[𝑗] = min(𝑑𝑝[𝑗], 𝑑𝑝[𝑗 − 𝑣𝑖] + 𝑤𝑖) 省メモリ 実装が楽 42
43.
考察&解法 (C)荷物の重みが1000以下 • これが一番お馴染みかも知れない. •
𝑊 𝑀𝐴𝑋 = 1000とおくと,重みの総和は高々 𝑁 ∗ 𝑊 𝑀𝐴𝑋(= 20万) 以下. • 重みに対して価値を最大化するDPができる. • 𝑑𝑝[𝑖][𝑗] ∶= 𝑖番目のアイテム(𝑖 = 1. . 𝑁)まで使って,重みの和jを達成す る価値の和の最大値 と定義すると,以下の漸化式を二重ループで計算すれば解ける • 𝑑𝑝 0 0 = 0, 𝑑𝑝 0 1. . 𝑁𝑊 𝑀𝐴𝑋 = −∞ • 𝑑𝑝[𝑖][𝑗] = m𝑎𝑥(𝑑𝑝[𝑖 − 1][𝑗], 𝑑𝑝[𝑖 − 1][𝑗 − 𝑤𝑖] + 𝑣𝑖(但し𝑗 − 𝑤𝑖 ≧ 0の時) ) • 後は重みW以下で価値が最大のものを求めれば良い. • さっきのスライドで説明した価値のDPとやり方はほぼ同じ 43
44.
考察&解法 (C)荷物の重みが1000以下 • これも重みの逆順に更新すれば, 時間計算量は
𝑂(𝑁2 𝑊 𝑀𝐴𝑋) 空間計算量は 𝑂 𝑁𝑊 𝑀𝐴𝑋 44
Download