Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AOJ 0022 Maximum Sum Sequence 解説
Search
kagamiz
March 30, 2013
Programming
1
1.5k
AOJ 0022 Maximum Sum Sequence 解説
OkNCT-ICT 2013 春合宿 Day 6 (らしい) に解説したもの.
kagamiz
March 30, 2013
Tweet
Share
More Decks by kagamiz
See All by kagamiz
KCS v2. の開発
kagamiz
0
210
internship final presentation
kagamiz
0
1.2k
internship-middle term presentation
kagamiz
0
980
すうがくのまほう
kagamiz
0
310
ご当地料理の紹介
kagamiz
0
320
オンラインジャッジシステムの実装
kagamiz
0
1.1k
AOJ 0557 A First Grader 解説
kagamiz
0
900
JOI2013 本選1 Illumination 解説
kagamiz
0
290
AOJ 0186 Aizu Chicken 解説
kagamiz
0
260
Other Decks in Programming
See All in Programming
Code Reviews
bkuhlmann
4
890
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
360
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.7k
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
200
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
1
170
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
840
GitHub Copilotのススメ
marcy731
1
200
データアナリストが行うDatabricksを活用したETLの自動化事例
shinoa
0
270
雑に思考を整理する技術と効能
konifar
59
29k
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
130
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
0
170
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.2k
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
132
6.3k
Art, The Web, and Tiny UX
lynnandtonic
289
19k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
Optimizing for Happiness
mojombo
370
69k
Six Lessons from altMBA
skipperchong
21
3k
The Invisible Customer
myddelton
114
12k
Music & Morning Musume
bryan
41
5.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
BBQ
matthewcrist
80
8.8k
Transcript
AOJ 0022 Maximum Sum Sequence 解説 @kagamiz
www.company.com 問題概要 • 長さがn の数列が与えられます. • 連続する1 個以上の項の和の最大値を求めてください. • n
≦ 5000 (Challenge ケースではn ≦ 10^6) • |ai| ≦ 100000
www.company.com 入力例の解析 • n = 7 数列 = {-5 -1 6 4 9 -6 -7} •
赤の部分列を選ぶと最適で, 和は19 になる. {-5 -1 6 4 9 -6 -7}
www.company.com 入力例の解析 • n = 13 数列 = {1 2 3 2 -2 -1 1 2 3 2 1 -2 1} •
赤の部分列を選ぶと最適で, 和は14 になる. {1 2 3 2 -2 -1 1 2 3 2 1 -2 1}
www.company.com 入力例の解析 • n = 3 数列 = {1000 -200 201} •
赤の部分列を選ぶと最適で, 和は1001 になる. {1000 -200 201}
www.company.com O(n^3) 解法 • すべての区間を試す. • 区間は左と右を決めれば一意に定まる ← O(n^2) 個
• 左から右までをfor 文で和を取る ← O(n)時間 • こうして調べた和の中の最大値が答え. • n ≦ 200 までならOK.
www.company.com O(n^2) 解法 • O(n^3) 解法の何が無駄だったか? • どの区間が最大になるかはよく分からないか ら、O(n^2) 個すべてを試したい.
• “左から右までをfor 文で和を取る ← O(n)時間” • これを高速にしよう
www.company.com O(n^2) 解法 • 累積和配列の利用. • S[i] = a[1] +
a[2] + … + a[i] という配列を用意. • S[1] から順番に計算するとO(n) 時間で構築できる. • 区間[l, r] の和はS[r] – S[l – 1] で求まる. • よって, 2 重ループがもっとも重くO(n^2) 時間となる. • n ≦ 5000 までならOK.
www.company.com O(n) 解法 • Challenge ケースでも満点を取るためにはどうすれば 良いか? → 動的計画法の利用. •
dp[i] : 区間[x, i]での部分列の和の最大値(a[i] は必ず含 む)とすると, dp[i] = max(dp[i – 1] + a[i], a[i]) となる. • 答えはdp[i] の最大値. • 今までの最大値を利用するか, 自分から始めるか.
www.company.com O(n) 解法 • n = 13 数列 = {1 2 3 2 -2 -1 1 2 3 2 1 -2 1}
dp[i]= {1 3 6 8 6 5 6 8 11 13 14 12 13} • これは, for 文で最初から計算すると線形時間で求まる. • これで, Challenge ケースでも満点が取れる! • お疲れ様でした.