[過去ログ] プログラミングのお題スレ Part9 [無断転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
454: 2017/08/12(土)19:04 ID:Bi4KH0eW(1/10) AAS
>>413です

もちろん合っているつもりのコードです
作者が言っても何の説得力もありませんが
456
(1): 2017/08/12(土)19:10 ID:Bi4KH0eW(2/10) AAS
それぞれの寿司を食べている期間をレーン上の線分で表します

この線の重なり具合をpileで表しました

効率良く食べられた場合はレーンがpile_max周するまでの間に食べきることが出来ます

170行目の判定がそれで、trueの場合は効率良く食べられない場合です
460: 2017/08/12(土)19:19 ID:Bi4KH0eW(3/10) AAS
効率良く食べられない方が簡単なのでその場合から

お寿司を以下のグループに分けます
----
各グループのお寿司は、レーンの特定の位置から食べ始めた場合、pile[グループ]周以内で食べ終わることが出来る
このとき、pile_max = Σ pile[グループ]
となる
---
このようなグループの分け方の最小の物が存在します
461: 2017/08/12(土)19:22 ID:Bi4KH0eW(4/10) AAS
同じグループのお寿司は連続して食べます
開始時と、各グループのお寿司を食べ終わった後、最初に来るお寿司から食べはじめ、pile[グループ]以内で食べられる食べ方でそのグループを食べ終える
ということを繰り返せば最小の時間で食べ終えることが出来ます
462: 2017/08/12(土)19:26 ID:Bi4KH0eW(5/10) AAS
グループ分けした時に1個のグループになった場合は、
効率良く食べられることになります
つまり、pile_max周以下で食べ終えることが出来ます

この時は、コード上にあるダミーのお寿司を追加してから最小時間を求め、ダミーのお寿司を食べてる時間を引けば求められます
464: 2017/08/12(土)19:30 ID:Bi4KH0eW(6/10) AAS
グループの分け方は少し難しいです

レーンの各整数位置に対して、
お寿司の線の両端にあたる点同士
線の重なりがpile_max未満である区間の点(両端を含む)
を同じグループの点とし、
これらを続けることで最小のグループ分けが出来ます
線の両端の点のグループが、そのお寿司のグループになります
465: 2017/08/12(土)19:31 ID:Bi4KH0eW(7/10) AAS
それぞれ、証明は出来ているつもりです
466: 2017/08/12(土)19:32 ID:Bi4KH0eW(8/10) AAS
もちろん、一般の巡回問題はこの方法では無理です
469: 2017/08/12(土)19:40 ID:Bi4KH0eW(9/10) AAS
pile_maxとその位置から下限が得られますが、
>>296 の例では98秒の物以外はすべてその下限になっています
一個その下限になるような例を見つければ答えがわかるのですが、
自力で検索してみればわかると思いますがそのような例はあっさり見つかります

98秒の例は効率良く食べられない場合になります

効率良く食べられる側のなかでも、pileから得られる下限値より大きくなる場合もあります
470: 2017/08/12(土)19:43 ID:Bi4KH0eW(10/10) AAS
いずれの場合も、PCを使わなくても手計算で十分可能です
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.039s