質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1048閲覧

動的計画法で部分和問題を解くときどの数字が使われているか知りたい

hiei1

総合スコア52

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/06/22 06:55

動的計画法で部分和問題を解くときどの数字が使われているか知りたいです。あまり知識がないのでこのコードからlistのどの数字が使われたかを判断するにはどのように変更すればいいでしょうか?

main.py

1def mins(a, A): 2 # 初期化 3 N = len(a) 4 inf = float("inf") 5 dp = [[inf for i in range(A + 1)] for j in range(N + 1)] 6 dp[0][0] = 0 7 8 # DP 9 seki = [] 10 for i in range(N): 11 for j in range(A + 1): 12 if a[i] <= j: # i+1番目の数字a[i]を足せるかも 13 l = min(dp[i][j - a[i]] + 1, dp[i][j]) 14 dp[i + 1][j] = l 15 else: # 入る可能性はない 16 dp[i + 1][j] = dp[i][j] 17 18 return dp[N][A] 19 20list = [4,8,6] 21print(mins(list,10))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

情報提供のみ。
動的計画法で求めた解を全列挙する方法にて、部分和問題をDPで解き、さらにそのDPから解を復元する方法について記載されています。
ちゃんと読めていませんが、図解で説明されていますので理解できればご自身のコードに組み込めるかもしれません。
さらに各種の問題の解法として意外と解説がない!動的計画法で得た最適解を「復元」する一般的な方法も参考になるかもしれませんが「部分和問題」ズバリの例は記載ありません。

投稿2022/06/22 07:55

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

aの要素がどのタイミングで使われているのかみたいということであれば

a[i]の値が使われるのがここなので、

python

1l = min(dp[i][j - a[i]] + 1, dp[i][j])

ここの前か後で適当に見たい値をprintすればよいです


条件を満たす値の組を求める必要がある場合には

1組でよければ復元テーブルというものを用意する(ググれば詳しい解説がいくらでもでてきます)
全列挙する必要があるならdpを逆からたどってdp[0][0]にたどり着ける組を探します。

投稿2022/06/22 07:33

編集2022/06/22 08:09
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiei1

2022/06/22 07:38

listのどの数を使うと正解になるかを表示するのは不可能ですか 例えば [4,8,6]、10の場合 4 6 数は2みたいな
ozwk

2022/06/22 07:40

まずもともとの問題はなんですか?
hiei1

2022/06/22 07:42

4, 6, 8の3枚のカードがある。 この3枚のカードから何枚か選んで、合計を10にすることができるだろうか。 10にできるのであれば カードの値と枚数を表示してくださいです
ozwk

2022/06/22 07:48

「知りたい」というからてっきりデバッグ目的とか興味かと思っていたら普通に問題の要件なんですね。 複数の組み合わせがある場合はどうするのですか?
hiei1

2022/06/22 07:56

それは考えないらしいです。なぜかわかりませんが
ozwk

2022/06/22 08:03

とりあえず追記しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問