SlideShare a Scribd company logo
1




  原案:komiya
解答:fura2, komiya
 スライド:komiya
問題概要

●   長さnのビット列を考える。
●   i番目のビットが1 ⇒ a[i]点を得る
●   i番目を中心に距離w以内にある1が奇数個
     ⇒ b[i]点を得る
●   点を最も多く得られるビット列を求める。

●   n, w ≦ 1000
●   0≦a[i], b[i]≦10^5
方針

●   動的計画法や単純な貪欲や乱択だとうまくいきそ
    うにない。
●   問題を整数計画で書いてみる。
●   目的関数や制約が最小カットっぽいことに気づく。
●   最小カットの形になるように定式化する。
解法

●   i番目のビットをk[i] = 0 or 1とする。
●   両端に0を補うと
    ...00000k[1]k[2]...k[n]00000....
●   累積和(mod 2)をとると、(x[i]=k[1]+...+k[i])
    ...00000x[1]x[2]...x[n-1]00000...
                or
    ...00000x[1]x[2]...x[n-1]11111...
    のいずれかの形になる。両方試してみる。
解法

●   x[i] = x[i-1]のとき、
     x[i-1] + k[i] = x[i-1] ⇔ k[i] = 0
●   k[i] ≠ 1なので、a[i]点の損失が生じている。
解法

●   x[i-w-1] = x[i+w] (mod 2)のとき、
     x[i+w] – x[i-w-1] = 0 (mod 2)
    ⇔ k[i-w] + … + k[i+w] = 0 (mod 2)
    ⇔ 幅wの区間に含まれる1の個数が偶数個
●   なので、b[i]点の損失が生じている。
解法

●   まとめると、
    (x[i] = x[i-1]のときのa[i]点の損失)
    + (x[i-w-1] = x[i+w]のときのb[i]点の損失)
    を最小化したい。

●   このままだと効率的に解けない。
●   早いLPソルバがあればこのままでも通るかも?
解法

●   iとi-1、 i-w-1とi+wは偶奇が異なることに注目。
●   y[i] = (iが奇数 ? x[i] : 1-x[i])   とおく。
●   さっきの式は、
    (y[i] ≠ y[i-1] のときのa[i]の損失)
     + (y[i-w-1] ≠ y[i+w]のときのb[i]の損失)
    を最小化する問題と読み替えられる。
●   これは最小カット!
補足

●   最小カットの復元は大丈夫ですか?

●   負の辺だけを見たら二部グラフになっているとき、
    最小カットで二部グラフの片側に属する変数を反
    転させるのはたまに出てくるテクニックです。
●   「同じときに損害が発生するんじゃ最小カットにな
    らなくて困る。反転できればいいのに。」
    →「よく見たら二部グラフだから反転できる!」
    みたいに考えれば無理なく導出できるかも?

More Related Content

What's hot

情報オリンピック夏合宿発表
情報オリンピック夏合宿発表情報オリンピック夏合宿発表
情報オリンピック夏合宿発表
Kazuma Mikami
 
Permutation
PermutationPermutation
Permutation
oupc
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
R上の変な位相
R上の変な位相R上の変な位相
R上の変な位相
nabeshimamasataka
 
ユークリッド空間上の変な位相
ユークリッド空間上の変な位相ユークリッド空間上の変な位相
ユークリッド空間上の変な位相
政孝 鍋島
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
 
Sanpo
SanpoSanpo
Sanpo
oupc
 
by_knzk
by_knzkby_knzk
by_knzk
knzk_hk
 
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
Yuto Takei
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
DEGwer
 
ダイクストラ法
ダイクストラ法ダイクストラ法
ダイクストラ法
ohsofty
 
無限と計算可能性と対角線論法
無限と計算可能性と対角線論法無限と計算可能性と対角線論法
無限と計算可能性と対角線論法
Ryosuke Nakamura
 
TopCoder SRM614 解説
TopCoder SRM614 解説TopCoder SRM614 解説
TopCoder SRM614 解説
EmKjp
 
Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会
Shuyo Nakatani
 
ポアンカレ計量
ポアンカレ計量ポアンカレ計量
ポアンカレ計量
政孝 鍋島
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
nitoyon
 
D : 解説
D : 解説D : 解説
D : 解説
Takumi Yamashita
 
ベクトル空間と表現行列
ベクトル空間と表現行列ベクトル空間と表現行列
ベクトル空間と表現行列
nabeshimamasataka
 

What's hot (20)

Cheat
CheatCheat
Cheat
 
情報オリンピック夏合宿発表
情報オリンピック夏合宿発表情報オリンピック夏合宿発表
情報オリンピック夏合宿発表
 
RUPC2017:M問題
RUPC2017:M問題RUPC2017:M問題
RUPC2017:M問題
 
Permutation
PermutationPermutation
Permutation
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
R上の変な位相
R上の変な位相R上の変な位相
R上の変な位相
 
ユークリッド空間上の変な位相
ユークリッド空間上の変な位相ユークリッド空間上の変な位相
ユークリッド空間上の変な位相
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
Sanpo
SanpoSanpo
Sanpo
 
by_knzk
by_knzkby_knzk
by_knzk
 
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
 
ダイクストラ法
ダイクストラ法ダイクストラ法
ダイクストラ法
 
無限と計算可能性と対角線論法
無限と計算可能性と対角線論法無限と計算可能性と対角線論法
無限と計算可能性と対角線論法
 
TopCoder SRM614 解説
TopCoder SRM614 解説TopCoder SRM614 解説
TopCoder SRM614 解説
 
Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会
 
ポアンカレ計量
ポアンカレ計量ポアンカレ計量
ポアンカレ計量
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
 
D : 解説
D : 解説D : 解説
D : 解説
 
ベクトル空間と表現行列
ベクトル空間と表現行列ベクトル空間と表現行列
ベクトル空間と表現行列
 

Viewers also liked

Goto
GotoGoto
Goto
oupc
 
Cube
CubeCube
Cube
oupc
 
One
OneOne
One
oupc
 
Palin
PalinPalin
Palin
oupc
 
Paren
ParenParen
Paren
oupc
 
Trip
TripTrip
Trip
oupc
 
Segpair
SegpairSegpair
Segpair
oupc
 
Rmq
RmqRmq
Rmq
oupc
 
Replace
ReplaceReplace
Replace
oupc
 
Magical
MagicalMagical
Magical
oupc
 
Sharp2sat
Sharp2satSharp2sat
Sharp2sat
oupc
 
Comment
CommentComment
Comment
oupc
 
Kth
KthKth
Kth
oupc
 
Sort
SortSort
Sort
oupc
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
 

Viewers also liked (15)

Goto
GotoGoto
Goto
 
Cube
CubeCube
Cube
 
One
OneOne
One
 
Palin
PalinPalin
Palin
 
Paren
ParenParen
Paren
 
Trip
TripTrip
Trip
 
Segpair
SegpairSegpair
Segpair
 
Rmq
RmqRmq
Rmq
 
Replace
ReplaceReplace
Replace
 
Magical
MagicalMagical
Magical
 
Sharp2sat
Sharp2satSharp2sat
Sharp2sat
 
Comment
CommentComment
Comment
 
Kth
KthKth
Kth
 
Sort
SortSort
Sort
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 

Similar to 1

自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
Hiroki Mizukami
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
Keisuke OTAKI
 
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM) コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
Takahiro (Poly) Horikawa
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
Mikio Kubo
 
はじめてのパターン認識8章 サポートベクトルマシン
はじめてのパターン認識8章 サポートベクトルマシンはじめてのパターン認識8章 サポートベクトルマシン
はじめてのパターン認識8章 サポートベクトルマシン
NobuyukiTakayasu
 
はじめてのパターン認識8章サポートベクトルマシン
はじめてのパターン認識8章サポートベクトルマシンはじめてのパターン認識8章サポートベクトルマシン
はじめてのパターン認識8章サポートベクトルマシン
NobuyukiTakayasu
 

Similar to 1 (6)

自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
 
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM) コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
 
はじめてのパターン認識8章 サポートベクトルマシン
はじめてのパターン認識8章 サポートベクトルマシンはじめてのパターン認識8章 サポートベクトルマシン
はじめてのパターン認識8章 サポートベクトルマシン
 
はじめてのパターン認識8章サポートベクトルマシン
はじめてのパターン認識8章サポートベクトルマシンはじめてのパターン認識8章サポートベクトルマシン
はじめてのパターン認識8章サポートベクトルマシン
 

More from oupc

Knapsack
KnapsackKnapsack
Knapsack
oupc
 
Game
GameGame
Game
oupc
 
Four op
Four opFour op
Four op
oupc
 
Divisor
DivisorDivisor
Divisor
oupc
 
Division
DivisionDivision
Division
oupc
 
Anagram
AnagramAnagram
Anagram
oupc
 
Comment
CommentComment
Comment
oupc
 

More from oupc (8)

Knapsack
KnapsackKnapsack
Knapsack
 
Game
GameGame
Game
 
Four op
Four opFour op
Four op
 
Divisor
DivisorDivisor
Divisor
 
Division
DivisionDivision
Division
 
Anagram
AnagramAnagram
Anagram
 
A
AA
A
 
Comment
CommentComment
Comment
 

1

  • 1. 1 原案:komiya 解答:fura2, komiya スライド:komiya
  • 2. 問題概要 ● 長さnのビット列を考える。 ● i番目のビットが1 ⇒ a[i]点を得る ● i番目を中心に距離w以内にある1が奇数個  ⇒ b[i]点を得る ● 点を最も多く得られるビット列を求める。 ● n, w ≦ 1000 ● 0≦a[i], b[i]≦10^5
  • 3. 方針 ● 動的計画法や単純な貪欲や乱択だとうまくいきそ うにない。 ● 問題を整数計画で書いてみる。 ● 目的関数や制約が最小カットっぽいことに気づく。 ● 最小カットの形になるように定式化する。
  • 4. 解法 ● i番目のビットをk[i] = 0 or 1とする。 ● 両端に0を補うと ...00000k[1]k[2]...k[n]00000.... ● 累積和(mod 2)をとると、(x[i]=k[1]+...+k[i]) ...00000x[1]x[2]...x[n-1]00000... or ...00000x[1]x[2]...x[n-1]11111... のいずれかの形になる。両方試してみる。
  • 5. 解法 ● x[i] = x[i-1]のとき、  x[i-1] + k[i] = x[i-1] ⇔ k[i] = 0 ● k[i] ≠ 1なので、a[i]点の損失が生じている。
  • 6. 解法 ● x[i-w-1] = x[i+w] (mod 2)のとき、  x[i+w] – x[i-w-1] = 0 (mod 2) ⇔ k[i-w] + … + k[i+w] = 0 (mod 2) ⇔ 幅wの区間に含まれる1の個数が偶数個 ● なので、b[i]点の損失が生じている。
  • 7. 解法 ● まとめると、 (x[i] = x[i-1]のときのa[i]点の損失) + (x[i-w-1] = x[i+w]のときのb[i]点の損失) を最小化したい。 ● このままだと効率的に解けない。 ● 早いLPソルバがあればこのままでも通るかも?
  • 8. 解法 ● iとi-1、 i-w-1とi+wは偶奇が異なることに注目。 ● y[i] = (iが奇数 ? x[i] : 1-x[i]) とおく。 ● さっきの式は、 (y[i] ≠ y[i-1] のときのa[i]の損失) + (y[i-w-1] ≠ y[i+w]のときのb[i]の損失) を最小化する問題と読み替えられる。 ● これは最小カット!
  • 9. 補足 ● 最小カットの復元は大丈夫ですか? ● 負の辺だけを見たら二部グラフになっているとき、 最小カットで二部グラフの片側に属する変数を反 転させるのはたまに出てくるテクニックです。 ● 「同じときに損害が発生するんじゃ最小カットにな らなくて困る。反転できればいいのに。」 →「よく見たら二部グラフだから反転できる!」 みたいに考えれば無理なく導出できるかも?