• 締切済み

効率よく補数を求める方法について

さまざまな値段のついた数多くの商品を袋詰めするのですが、1つの袋に詰める商品の値段の合計が全ての袋について1万円以上になるようにしつつ、袋の数をできる限り多くしたい、という前提です。 例えば、8000円の商品が7個あるとした場合(合計56000円)、袋を3つ用意して、ある袋に3個、別の袋に2個、また別の袋に2個入れることで条件を満たします。 もし4つの袋に分けようとすると、どうしても8000円の商品1個だけしか入らない袋ができてしまうため、上記の「全ての袋について1万円以上」という条件を満たしません。 また、2つの袋に分ける方法は、「袋の数をできる限り多くしたい」という条件に合いません。 よって、この場合は袋を3つ用意するのが最適解となります。 その上で、袋をもう1つ増やすために商品を1個追加するとしたら、最低何円の商品を追加すればよいか求めたいです。 上記の例だと、2000円の商品を追加すれば3袋から4袋に増やせることが感覚的に分かっていただけると思います。あるいは、「8000円の商品7個と1999円以下の商品1個を用いて、1万円以上の組み合わせを4組作ることはできないだろう」と。 しかし、現在手元にあるデータはキリのいい数字ばかりでなく、しかも1つずつの商品はもっと安い値段なので、感覚的に捉える事ができず、だからといって「1円追加したら・・・2円追加したら・・・」とアルゴリズム的にやっていく気にもなれません。 そこで、今回の質問は以下のようになります。 「1万円以下の商品が複数あり、それら全てを上手に袋に詰め分けることで、全ての袋を1万円以上にしつつ、袋の数を最大にできたという前提で、 最低で何円の商品を1個追加すれば、袋をさらに1つ増やせるか」 この「何円」の部分を素早く求めたいのです。 ちなみに、この質問は以前から投稿させていただいている問題の一部で、先日も同様の質問をさせていただいていたのですが、いただいた回答が「袋の数を最大にできていない前提」でのアイデアだったため、参考にならないと判断せざるを得ませんでした。 以上、宜しくお願いいたします。

  • ao-b
  • お礼率74% (230/307)

みんなの回答

  • trytobe
  • ベストアンサー率36% (3457/9591)
回答No.1

結論として、 『そこで、今回の質問は以下のようになります。 「1万円以下の商品が複数あり、それら全てを上手に袋に詰め分けることで、全ての袋を1万円以上にしつつ、袋の数を最大にできたという前提で、 最低で何円の商品を1個追加すれば、袋をさらに1つ増やせるか」 この「何円」の部分を素早く求めたいのです。』 に、一般的な解はありません。 つまり、任意のn個の商品(価格はそれぞれP1~Pn)で成立している状態に、n+1個目の商品(価格Pn-1)を加えたときの最適なアクションは、他のn個の商品の分割状態によって一意に定まらず、数学的帰納法によってこのような命題を満たす一般化をめざすのは不可能であり得策ではない、のです。 おおもとの目的である『さまざまな値段のついた数多くの商品を袋詰めするのですが、1つの袋に詰める商品の値段の合計が全ての袋について1万円以上になるようにしつつ、袋の数をできる限り多くしたい』というのは非常にわかりやすく身近な問題です。 ただ、それを如何に数学的・アルゴリズム的に「簡略な」「試行錯誤を最小化した」ものにできるか、というのは、あまり思いつきの切り口にこだわらないほうがいいのです。 少なくとも n個で成り立つ状態から n+1個で成り立つ状態を一意に導けるという先入観は捨てたほうがいいでしょう。その付け足した1個のせいで、それなら、すでにつめた袋からこれを抜いて入れ替えて、その抜いたのをさらに別の袋から抜いたのと入れ替えて、そうやっているうちに安い小物がたくさん小銭のようにたまって規定額をオーバーしていた袋から、そこそこの価格の商品を全部抜いていって、新しい一袋ができる、など、様々なことが起こり得るのです。 まあ、日本の硬貨(1,5,10,50,10,500円玉)を、お年玉のためにかき集めて、さあ1000円以上のお年玉袋をたくさん準備しよう、としているほうが、その金銭感(≠金銭感覚)で、コインの入れ替えのイメージをつけやすく、当初の問題につながるアプローチが得られやすいと思いますよ。

ao-b
質問者

お礼

おっしゃる通りで、入れ替えの作業がとても面倒だと感じたので、特にこの部分を自動化できればと思ったのですが、ロジックアイデアが1つ出ては多くの例外ケースをもって消え、1つ出ては消え、1つ出ては消えで、どうしようもなくなり投稿させていただいたわけです。 お年玉のアイデアは思いつきませんでしたね。六元連立不等式でしょうか、それを9999元に応用できればいいですが、現段階ではアイデアを思いつきません。この件は改めて投稿させていただこうと思います。 この質問については未解決終了とします。

関連するQ&A

  • この問題の計算方法・公式について悩んでいます。

    まず、この質問を投稿するまでExcelカテゴリで質問させていただいていたのですが、「計算方法が分からないのでExcelでどう処理したらいいのかわからない」というような内容の回答をいただいてしまったため、一旦打ち切ってこちらで質問させていただくことにした次第です。 宜しくお願いいたします。 様々な商品があります。1円以上9999円以下で、個数は今後増えていくため決まっていません。 これらの商品を袋詰めしていくのですが、1つの袋に商品の値段の合計が1万円以上になるようにしたいです。かつ、使う袋の数は多ければ多いほど良いです。 例えば・・・ 1000、2000、3000、4000、5000、6000円の6個(21000円)の場合、1000+3000+6000=10000、2000+4000+5000=11000で2袋作れます。1000+2000+3000+4000=10000、5000+6000=11000でも同じく2袋となります。袋の数が最大であれば、商品の袋への分配パターンは特にこだわりません。 8000円5個(40000円)の場合は2袋となります。3袋に分配しようとするとどうしても8000円(1万円未満)の袋が出来てしまうためです。 1000、2000、3000、・・・、8000、9000円の9個(45000円)の場合、ちょうど10000円の袋が4つ、余った5000円の商品は適当にどれかの袋に加えるとして、とにかく4袋作ることができます。これを3袋に詰めるようなやり方は上記の「使う袋の数は多ければ多いほど良い」に反します。 例をあげるときりが無いのでこのくらいにしますが、今回皆様のお知恵をお借りしたいのは、 1.ある時点で手元にある商品を上手に袋分けしたら、最大でいくつの袋を作れるか。 2.袋の数が最大になるように商品をどう分ければよいか(1パターン分かればよい)。 3.また、もう1つ商品を追加して袋の数をさらに増やせるのであれば、最低いくらの商品を追加すればよいか。 以上3点です。 何かあれば補足します。宜しくお願いいたします。

  • Excel:組み合わせを上手に選ぶ方法

    手元のExcelデータには、A列に商品名、B列に値段が入力されています。 これらの商品をいくつかのグループに分けて袋詰めするのですが、全ての袋を一定額(例えば10000円)以上にしつつ、袋の数をなるべく多くしたいです。 そこで、Excel上でその最大の袋の数と組み合わせを瞬時に計算できないかと考えています。 アルゴリズムとしては、例えば、袋の数が「商品数-1」個のときに全ての袋を一定額以上にできるか、もし全ての商品の組み合わせについて一定額以上という条件を達成できなければ袋の数を「商品数-2」個・・・としていくことを考えましたが、とてつもなく面倒そうです。 しかも、入力される商品はまだ増えていくので、その都度簡単に計算し直せる方がいいです。 以上の条件で、Excelを活用できるようなアイデアをいただければと思います。 宜しくお願いいたします。

  • この場合の「最小値」を求めたい

    今回の質問と同じ題材(異なる内容)のものをExcelカテゴリで投稿させていただいていましたが、また内容の異なる質問をさせていただきます。 ・・・ 多数の商品があります。今後また商品が増えていくため、最終的な総数・値段の合計は分かりません。現在の個数・値段は分かります。 これらの商品を袋に詰めていくのですが、1つの袋につき合計一万円以上となるように詰めていきます。だからといって、全商品の合計が一万円以上だから1つの袋に詰めてお終い、というわけではありません。 例えば「全商品(5個以上)の値段の合計が五万五千円で、上手に袋詰めすれば一万円以上の袋が5つ作れる」のであればそのようにしたいです。逆に「全商品(5個以上)の値段の合計が五万五千円で、5つの袋にどのように詰めても、1つは一万円未満の袋になってしまう」こともありえます。そのときは4つの袋に詰めて4つとも一万円以上の袋にできれば良いのですが、それでも駄目なら袋3つ・・・と、とにかく一万円以上の袋は多ければ多いほど良いわけです。 ・・・ そこで、「もう1つ商品を追加し、上手に袋詰めし直したら一万円以上の袋をさらにもう1つ作れたとする」と、最低でも何円の商品を追加すれば良いか?その額を求めたいです。 ・・・ 一応、Excelデータとして、A列に商品名、B列に値段が打ち込まれているので、上記の額がD1セルに自動的に表示されるようにしたいです。また冒頭にもあるように、今後データに打ち込む商品は増えていくので、その都度D1セルの表示が変わっていくものが良いです。 以上、宜しくお願いいたします。

  • Excelで数値が自動的に入力されるようにしたい

    この質問は4カ月ほど前に投稿させていただいたものと同じ内容で、当時解決につながる様なアイデアをいただけなかったのですが、また必要が出てきたため再び投稿させていただくものです。 様々な値段の様々な商品があり、今後も増えていきます。 これらの商品を袋詰めしていくのですが、1つの袋に商品の値段の合計が1万円以上になるように詰めていきます。かつ、使う袋の数は多ければ多いほど良いです。 例えば、全商品の値段の合計が4万5千円だとして、その内訳が1千円・2千円・3千円・・・・9千円の(たまたま千円の倍数の)9個だとしたら、ちょうど1万円の袋が4つ出来、5千円の商品が余ります。その5千円の商品は適当にどれかの袋に加えるとして、とにかく1万円以上の袋が最大で4つ作れるということになります。逆に、3つの袋に分けるような詰め方は、上記の「使う袋の数は多ければ多いほど良い」に反するため、不適当です。 このような条件を満たすような商品の各袋ごとへの分け方をExcelで求めたいです。 A列に商品名、B列に値段を入力します。 C列に袋の番号(ダミー)が自動入力されるようにしたいのです。 上記の例だと B1セルに1000と入力すればC1セルに1(または0または表示なし)と、 B2セルに2000と入力すればC2セルに1(または0または表示なし)と、 ・・・ B4セルに4000と入力すればC1~C4セルに1と、 ・・・ B6セルに6000と入力したときに、例えば、C1=C3=C6=1、C2=C4=C5=2、というように、自動的に変更されるようにしたいです。なお、C列のセルに同じ数値が入る組み合わせは複数パターンがあると思いますが、1パターンだけ出れば大丈夫です。 逆に、B6セルに6000と入力してもC列のセルが全て1が自動入力されてしまったら、これは「2つの袋にどのように商品を詰め分けても、必ず1万円未満の袋が出来てしまう」ことを意味するので、不適当となります。 Excelのどのような機能を使えば、以上のようなことができるでしょうか。 宜しくお願いいたします。

  • エクセルでりんごの個数を計算したい

    りんごの値段が個数によって1個100円、3個200円、6個300円と3つの価格帯があるときに、 ある金額で買えるりんごの最大個数を計算したいのですが、条件式の作り方に悩んでいます。 例としては 500円で買える最大個数は6個300円を1つと3個200円を1つで合計6×1+3×1=9個 1000円で買える最大個数は6個300円を3つと1個100円を1つで合計6×3+1×1=19個 2000円で買える最大個数は6個300円を6つと3個200円を1つで合計6×6+3×1=39個 と頭では計算できるのですが、IF関数で作ろうとして条件の分け方で止まってしまいました。 できれば、この計算ができる条件式を分かりやすく教えていただけますようよろしくお願いします。

  • 確立の問題でわからないものがあります。

    確率の問題です。 袋の中に1から6までの数字が書いてある球が2個ずつ合計12個ある。 このなかから3個の球を同時にとりだす。 取り出した球の数字について考える。 問 三つの数のうち最も大きい数 が4である確立は何か 解説のところに、 最大が4となるのは、最大が4以下の場合から最大が3以下のものをひけば出ます。 8C3/12C3 - 6C3/12C3 =9/55 とあるのですが文章の意味が分かりません((((;゜Д゜))))))) 最大が4以下のものから最大が3以下のものを引いたら、5と6が残りますよね?そしたら最も大きい数が4にはなりませんよね?? どういうことなのですか?(T_T)

  • 組み合わせを上手に選ぶ(内容を変えて再投稿)

    手元のExcelデータには、A列に商品名、B列に値段が入力されています。 ここでC列に1以上の整数を1・2・3・・・と順に、以下の条件に合うように自動的に入力したいです。 条件とは、C列に同じ数値が入った行のB列セルの合計が、(全てのC列の数値において)10000以上になるように、そのうえでC列の最大値がより大きくなるようにすることです。 商品の内容(値段)によっては、全て10000以上になる組み合わせ方が複数存在することもありますが、任意の1種類だけC列に自動入力できれば良いです。 但し、A・B列への入力が今後増えていくので、その都度C列の自動入力をし直せるものがよいです。 以上の内容で、Excelを上手に使うアイデアを紹介していただければと思います。

  • 祝儀袋が入るバッグ

    もうすぐ友人の結婚式があります。 1.色はシルバー系 2.祝儀袋(袱紗)が入る大きさのバッグ 3.値段は7000円以下(できれば) 以上のような条件を満たすバッグがあれば教えてください。

  • 効率よく飴を分類する方法

    中身の見えない袋に飴が10個入っております。 どのような味の飴が入ってるかはわかりません。 この10個の飴を、味ごとにお皿の上に出して分類したいのですが、 1個しかない味の飴は捨てたいのです。 例えば、袋に入っている飴が、イチゴ味が5個、コーラ味の飴が3個、メロン味が1個、ハッカ味が1個なら、 お皿Aにイチゴ味を5個、お皿Bにコーラ味を3個、メロン味とハッカ味は捨てます。 このような操作を、効率よく行いたいのです。 ただし、以下の条件がございます。 1.お皿は無限に用意できます 2.飴は1つずつしか持てません 3.一度袋から出したら袋には戻せません 4.お皿の上に置いた飴は再度移動できますが、一度捨てた飴は戻せません 5.一枚のお皿には、たとえ一時的でも、異なる種類の飴は置けません お伺いしたいのは”何枚お皿が必要か?”等ではなく、 どうすれば効率よく飴を分類できるか?という感じです。 例えば、お皿は沢山必要だけど短時間でできる方法や、 時間はかかるけどお皿は最低限で済む方法など、です。 数学ではないかもしれませんが、お答えいただけたら幸いです。

  • 統計学の問題

    統計学の問題で以下の2つの解き方を教えてください。 1.一個辺りの重さがN(100,10)の正規分布に従うある果物について、 100個を1セットとし、1セット辺りの重さが平均を10000gとして誤差200gに収まる確率を求めよ 2.100円が3枚、10円が8枚、1円が5枚入っている袋から同時に3枚取り出した時、三枚の合計が120円以上である条件のもと、1円が含まれる条件付き確率を求めよ よろしくお願いいたします