50時間以内に解けるかな?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Brute Force

50時間以内に解けるかな?

#1

投稿記事 by Brute Force » 14年前

 長さnの数列Aと整数Mに対して、Aの要素の中のいくつかの要素を足しあわせてMが作れるかどうかを判定するプログラムを作成せよ。
Aの各要素は1度だけ使うことができる。
数列Aが与えられたうえで、質問としてq個のMが与えれるので、それぞれについて"yes"または"no"と出力せよ。
プログラムはC, C++, JAVA, C++11, C#, Dいずれかの言語で作成すること。

入力
 1行目にn、2行目にAを表すn個の整数、3行目にq、4行目にq個の整数Miが与えられる。
出力
 各質問についてAの要素を足しあわせてMiを作ることができればyesと、できなければnoと出力せよ。

制約
n ≤ 20
q ≤ 200
1 ≤ Aの要素 ≤ 2000
1 ≤ Mi ≤ 2000

入力例 1

5
1 5 7 10 21
8
2 4 17 8 22 21 100 35

出力例 1

no
no
yes
yes
yes
yes
no
no

ヒント!
 この問題は、総当たり探索によって解くことができる。
solve(p, t)をp番目以降の要素を使ってtを作れるかを判定する関数とすれば:

solve(0, M)
solve(1, M-{1番目より前の数を使ってできた和})
solve(2, M-{2番目より前の数を使ってできた和})
...

を再帰的に呼び出して検証すればよい。
各再帰関数においてp番目の要素を使った場合・使わなかった場合で2つの再帰関数を呼ぶ。
つまり、solve(p, t)においてsolve(p+1, t-A[p]), solve(p+1, t)が可能かを検証すれば全ての組み合わせを試すことができる。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 50時間以内に解けるかな?

#2

投稿記事 by beatle » 14年前

50時間以内に解けるかな?関連の一連の3つの投稿が、すべて同一人物によるものだと仮定して書きます。
もし違っていたらすみません。

フォーラムルールにもあります通り
フォーラムルール さんが書きました:なるべくオリジナルな名前を決め、以後同じ名前を使い続けてください。
フォーラムルール さんが書きました:課題の丸投げ(問題文だけ書く事)は禁止です。
どうしても提出期限の関係で答えが欲しい時はその事をしっかり明記の上、
回答者さん達の理解を求めるようにしましょう。
とのことです。
ご注意を。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 50時間以内に解けるかな?

#3

投稿記事 by softya(ソフト屋) » 14年前

同じ方からの投稿である他の2つに付いては凍結させて頂きました。
まず、こちらの問題を解くお手伝いをさせて頂きますのでフォーラムルールをお読みになっていただいて、それに沿った投稿をお願いします。
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ikarara2

Re: 50時間以内に解けるかな?

#4

投稿記事 by ikarara2 » 14年前

こんにちは、ikarara2(ダブル)です。
面白そうなのでサクッと問いちゃいました。

申し訳ないですが同じ学内の投稿で自作自演の可能性もあるのでhiddenとさせて頂きます。 by softya(ソフト屋)
非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。

アバター
tk-xleader
記事: 158
登録日時: 15年前
連絡を取る:

Re: 50時間以内に解けるかな?

#5

投稿記事 by tk-xleader » 14年前

D言語が選択肢にある時点で、ちょっと課題の丸投げってのは考えづらい(D言語を授業や研修で使ってるところがあるとは思えないですから…)ですね。

これはここのメンバーに対する挑戦状として理解しましたが、それでよろしいですかね?

naohiro19
記事: 256
登録日時: 15年前
住所: 愛知県

Re: 50時間以内に解けるかな?

#6

投稿記事 by naohiro19 » 14年前

No.4のコードはコンパイルがとおりません。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 50時間以内に解けるかな?

#7

投稿記事 by みけCAT » 14年前

解いてみました。
問題を見てから50時間以内です。(5時間も経ってません)
非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。
使用可能な言語からAOJの問題かと思いましたが、違うようですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 50時間以内に解けるかな?

#8

投稿記事 by みけCAT » 14年前

ヒントを参考に解いてみました。
非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る