atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • 部分列に関する数え上げ

早稲田大学チームvivid_turtle 知見共有@ ウィキ

部分列に関する数え上げ

最終更新:2019年09月13日 16:41

vivid_turtle

- view
メンバー限定 登録/ログイン
連続部分列はつぎのような手法と相性が良い。また、部分列に関しても下の記事の手法のほうが良いものもあるだろう。
  • ありうる全事象についての変換の和の数え上げ

部分列は数列と文字列両方ある。

文字列の部分列の数え上げはけんちょん先生の

https://qiita.com/drken/items/a207e5ae3ea2cf17f4bd

にある。

数列の部分列についてかく。
数列の部分列は、連続部分列の問題と違って一定のパターン化がしづらいと思われる。
というわけでこのページは出てきた解けなかったほぼすべてのパターンをまとめる。
ちなみに、数列の部分列は全くの空を1通りとして数えて、
長さNでは2^N通りある。(それぞれの番目について選ぶか選ばないかの2択)

部分列の相補性


数列から部分列Aを生成すると、空の列も部分列として許容するなら、必ずAの含まれなかった要素を全て持つ部分列Bが形成される。これを部分列の相補性ということにする。(僕が今名付けました。)

この考えを利用すると、すべての部分列はペアをつくることができる。

例として、数列{1, 10, 100}なら
({}, {1, 10, 100}), ({1}. {10, 100}). ({10}, {1, 100}), ({100}, {1, 10})
となる。

この考え方を持っておくと解ける問題があった。

AGC020 C(700) Median Sum


https://atcoder.jp/contests/agc020/tasks/agc020_c

上記の考え方を利用すると、空の列も部分列として数えるなら、2^N / 2の計2^(N-1)ペアできるとわかる。
また、相補性があるのでお互いのペアの和はかならず、数列の前項の和になるとわかる。
例えば、{1, 10, 100}の数列のペアの1つとして({1, 100}, {10})が存在するけど、それらの和は1 + 100 + 10 == 111で数列の前項の和に等しい。

中央値というキーワードに対する操作として、要素を大きい方と小さい方にわけるというのがある。普段ならばどの要素をどう振り分ければいいのか困るが、今回は上記の考え方を利用すると都合よくペアになってる。よって、ペアのうちでの大きい方と小さい方に分けることを考える。
そうやって各ペアについて大きい方と小さい方に分けると、相補性の特徴として、大小がはっきりとわかれる。なぜならば、和が一定でかつ小さい方の大きい方の差がどんどん縮まり、最終的には境界条件となる二つのペアの和が同じになるためである。

つまり、こう考えると、境界では二つの部分列ペアの和の差は0に一番近い状態になってる。
これは言い換えると、小さい方のペアは(全項の和)/2以下の最大、大きい方のペアは(全項の和)/2以上の最小になることである。
そしてこの問題は空の列を部分列としてみなさないため、中央値は大きい方のペアの一番小さいもの、つまり(全項の和)/2以上の最小のものである。

あとはこれを数え上げればよい。
boolのdp[i][j] := i項目まで見て、和がjが作れたかどうか
で動的計画法をすればよい。計算量はO(n^3)、2000^3である。

まずいですね。でも動的計画法の手順としてはこれ以上計算量はおちません。
しかし計算するのは真偽の二値のDPなので、C++のbitsetを利用すれば64倍の定数倍高速が可能です!

  • bitsetでの定数倍改善
「部分列に関する数え上げ」をウィキ内検索
LINE
シェア
Tweet
早稲田大学チームvivid_turtle 知見共有@ ウィキ
記事メニュー

メニュー

  • トップページ
  • プラグイン紹介
  • メニュー
  • 右メニュー
  • アルゴリズム別知見
  • 個別問題知見



リンク

  • @wiki
  • @wikiご利用ガイド




ここを編集
記事メニュー2

更新履歴

取得中です。


ここを編集
人気記事ランキング
  1. 座標での考えの大前提
  2. 座標での最近点
もっと見る
最近更新されたページ
  • 1447日前

    bitsetでの定数倍改善
  • 2060日前

    しゃくとりの大原則
  • 2060日前

    アルゴリズム別知見
  • 2063日前

    グリッド上の構築
  • 2064日前

    ARC096-D
  • 2064日前

    ARC092-D
  • 2064日前

    個別問題知見
  • 2068日前

    ダブリングの使い所さん
  • 2074日前

    文字列と動的計画法
  • 2074日前

    数え上げのDPのさまざま(知らなかったこと)
もっと見る
人気記事ランキング
  1. 座標での考えの大前提
  2. 座標での最近点
もっと見る
最近更新されたページ
  • 1447日前

    bitsetでの定数倍改善
  • 2060日前

    しゃくとりの大原則
  • 2060日前

    アルゴリズム別知見
  • 2063日前

    グリッド上の構築
  • 2064日前

    ARC096-D
  • 2064日前

    ARC092-D
  • 2064日前

    個別問題知見
  • 2068日前

    ダブリングの使い所さん
  • 2074日前

    文字列と動的計画法
  • 2074日前

    数え上げのDPのさまざま(知らなかったこと)
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. R.E.P.O. 日本語解説Wiki
  2. VCR GTA3まとめウィキ
  3. ドタバタ王子くん攻略サイト
  4. ガンダムGQuuuuuuX 乃木坂46部@wiki
  5. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  6. STAR WARS ジェダイ:サバイバー攻略 @ ウィキ
  7. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  8. アサシンクリードシャドウズ@ ウィキ
  9. パズル&コンクエスト(Puzzles&Conquest)攻略Wiki
  10. SYNDUALITY Echo of Ada 攻略 ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. oblivion xbox360 Wiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. 鬼レンチャンWiki
  10. SDガンダム ジージェネレーションクロスレイズ 攻略Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  2. フェルシー・ロロ - アニヲタWiki(仮)
  3. 参加者一覧 - ストグラ まとめ @ウィキ
  4. 揚げバター - アニヲタWiki(仮)
  5. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  6. ロスサントス警察 - ストグラ まとめ @ウィキ
  7. RqteL - ストグラ まとめ @ウィキ
  8. anbrella(餡ブレラ) - ストグラ まとめ @ウィキ
  9. 雑談・交流掲示板 - 星の翼(Starward) 日本語wiki @ ウィキ
  10. 発車メロディー変更履歴 - 発車メロディーwiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.