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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kagamiz
March 30, 2013
Programming
1.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AOJ 0022 Maximum Sum Sequence 解説
OkNCT-ICT 2013 春合宿 Day 6 (らしい) に解説したもの.
kagamiz
March 30, 2013
More Decks by kagamiz
See All by kagamiz
KCS v2. の開発
kagamiz
0
290
internship final presentation
kagamiz
0
1.4k
internship-middle term presentation
kagamiz
0
1.2k
すうがくのまほう
kagamiz
0
390
ご当地料理の紹介
kagamiz
0
500
オンラインジャッジシステムの実装
kagamiz
0
1.2k
AOJ 0557 A First Grader 解説
kagamiz
0
1k
JOI2013 本選1 Illumination 解説
kagamiz
0
420
AOJ 0186 Aizu Chicken 解説
kagamiz
0
350
Other Decks in Programming
See All in Programming
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
170
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
이 함수, 실패하면 어떻게 되나요? null부터 Rich Errors까지, Kotlin 에러 처리 15년
haeti2
0
130
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
新卒PdEのリアル
ryu1013
1
400
typoなんかねぇよ
raspython3
0
660
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.3k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
580
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Crafting Experiences
bethany
1
290
ラッコキーワード サービス紹介資料
rakko
1
4.7M
A Soul's Torment
seathinner
7
3.5k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Unsuck your backbone
ammeep
672
58k
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 ケースでも満点が取れる! • お疲れ様でした.