engineeringc++atcoder競プロこんにちは、@kz_moritaです。実装したりしています。年はずっとスマホアプリのクライアント側のエンジニアをしていたのでとても新鮮な気分です。プライベートでは競技プログラミングに取り組んでいます。今回のその中で勉強になった順列を全列挙する方法について簡単に紹介します。用いてこんなにシンプルに実装できるとは思いませんでした。ような列が与えられた時に以下のような全ての並び方を列挙することです。重ループすればよい)可変長の列に対して順列をもとめるとなるとループの階層自体が可変なためその方式では実装することができません。用いると簡潔に全列挙をすることができます。以下にサンプルコードを記載します。0;}注目して欲しいのが、以下の箇所です。自信が並び替えられた状態になります。コンソールに表示するように実装してみると以下のように期待していた結果が得られます。数値列を作りたい場合には、以下のように実装することができます。0);上記を使って書き直すと以下のようなサンプルコードになります。個の組み合わせを列挙することが可能になります。使用すると、とても簡潔に実装することができました。自体の実装例などもあるので、参考にしてみると良いかと思いました。最近また競技プログラミングをやり始めました。使用しているのですが、競技プログラミングとなると問題ごとにファイルをわけ、そのファイル単位で実行する必要があります。問題が6問出題されるため以下のようなファイルを作ることが多いです。今回は、その設定やCLion上でのフォルダ構成などを簡単にご紹介します。ディレクトリ構成は以下のようにしています。競技プログラミングのためのC++標準入力こんにちは、@kz_moritaです。標準入力の受け取り方を簡単にまとめます。いうものを使用します。いう変数で管理することができます。以下のような形式で2つの数値が入力として与えられるケースを考えます。この場合には、以下のようなコードで受け取ることが可能です。あるのが、以下のような形式の入力です。この場合は以下のようにして受け取ることが可能です。用いたい場合は以下のようにすれば良いです・2019年8月11日ナップサック問題をメモ化を使って解くこんにちは、kz_moritaです。今回は、前回の続きです。前回作成したプログラムをメモ化という方法で高速化してみます。前回と同様ナップサックにアイテムを入れるかどうかの木構造を考えたときに、以下のようになったと仮定します。なっていることがわかります。これらのノードの下に続くノードたちは全く一緒のものになります。ここは片方で計算し終えていれば再度計算する必要はありません。よってこのノードの以下の計算結果をメモしておいて再利用することができます。それでは早速計算結果をメモする実装を行なっていきます。返すように修正します。再帰的に見ていく子ノードのアイテムを入れるorいれないについて、計算結果の大きい方をメモしていきます。それでは以下にソースコードを記載します。(items.2019年8月4日ナップサック問題を解くこんにちは、kz_moritaです。最近競技プログラミングを再度やり始めて悪戦苦闘しています。本記事では、ナップサック問題を実際に解いてみます。今回の対象となるナップサック問題ですが、Wikipediaにはこう書かれています。超えない範囲でいくつかの品物をナップサックに詰め、ナップサックに入れた品物の価値の和を最大化するにはどの品物を選べばよいか」という整数計画問題である。要するに、特定の容量が決まっているナップサックにお宝を目一杯詰めたい時に、お宝の価値が最大になる組み合わせを求めるっていう問題ですね。出来るだけ価値が高いお宝を詰めたいけども、あまり容量の大きな物を入れると数が入らなくなってしまうというトレードオフをうまいこと求めようというものです。それでは、まずは普通に解いてみます。今回の例として以下のような条件で考えてみます。ナップサック問題を解くにあたり、以下のような木構造を考えます。Itemをナップサックに入れるか入れないか、という分岐を木構造で表現してみます。(4つの数字と四則演算を用いて10をつくるゲーム。解くプログラムを作ろうとして、その1要素としてC++で逆ポーランド記法を計算するプログラムを書いてみたら楽しかったのでメモしておきます。2ならば、12+の用に書きます。コンピュータで計算式を解析するのに向いている記法で、演算子を後置するようなイメージです。ような例をつかって計算順序のイメージをみてみます。左から順番に文字を処理していき以下のような順序で演算していきます。詳しい説明はこちらのサイトがすごくわかりやすいので、ぜひ参照してみてください。環境は以下の通りです。c++14の記法を一部使っています。今回はユニットテスト用にgoogleTestを使用することにしました。Testに関しては参考になったサイトを載せておくのでそちらを参照していただければと思います。