Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.6k
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
270
internship final presentation
kagamiz
0
1.3k
internship-middle term presentation
kagamiz
0
1.1k
すうがくのまほう
kagamiz
0
360
ご当地料理の紹介
kagamiz
0
460
オンラインジャッジシステムの実装
kagamiz
0
1.2k
AOJ 0557 A First Grader 解説
kagamiz
0
990
JOI2013 本選1 Illumination 解説
kagamiz
0
370
AOJ 0186 Aizu Chicken 解説
kagamiz
0
320
Other Decks in Programming
See All in Programming
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
140
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
230
AIコーディングエージェント(Manus)
kondai24
0
190
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
210
Developing static sites with Ruby
okuramasafumi
0
300
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.2k
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
150
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7.3k
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
480
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
360
dotfiles 式年遷宮 令和最新版
masawada
1
780
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
360
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Done Done
chrislema
186
16k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
Being A Developer After 40
akosma
91
590k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Navigating Team Friction
lara
191
16k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
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 ケースでも満点が取れる! • お疲れ様でした.