4117:単純な整数除算の問題(ダイナミックプログラミング)

 

合計時間制限: 
100ミリ秒
 
メモリ制限: 
65536kB
説明

正の整数nは正の整数のシリーズとして表され、N = N1 + N2 + ... + NK、 N1> = N2> = ...> = NK> = 1、K> = 1。
これは、正の整数を表す。nは正の整数であり、nはパーティションと呼ばれています。異なる正の整数nの数を分割する分割数nは、正の整数と呼ばれます。

エントリー
データの複数のセットを含む標準的な試験入力。各試験は、整数N(0 <N <= 50)です。
輸出
データを、各試験のための出力の分割数N。
サンプル入力
5
サンプル出力
7
プロンプト
5,4 + 1,3 + 2,3 + 1 + 1、+ 2×2 + 1 + 1 + 2 + 1 + 1 + 1 + 1 + 1
1  @ アイデアを解決:ナップザック問題完全に典型的なダイナミック企画
 2を // 値、5つの項目を含むものとして考えることができる5への入力、場合それぞれ1,2,3,4,5
 3  / / 各項目が複数回選択することができ、値は最終的に物品5の選択された数を蓄積しているであろう
 4。 // 一次元アレイスクロール使用できる
 5  // 状態遷移式:DP [J] = DP [ JI] + DP [ J] 
。6の#include <ビット/ STDC ++ H.>
 7。 使用した 名前空間STD;
 8  int型のmain(){
 9。     INT N;
 10      ながら(CIN >> N){
 11。         INT DP [ 1010 ];
 12である          のmemset(DP、0sizeof (DP));
 13であります         DP [ 0 ] = 1 ;
14          のためにINT iが= 1 ; I <= N; ++ i)は、
 15              のためにINT J = I; J <= N; ++ j)は{
 16                  DP [J] = DP [J - I] + DP [ J];
17              }
 18          COUT << DP [N] << ENDL。
19      }
 20      リターン 0 21 }

 

おすすめ

転載: www.cnblogs.com/aiqinger/p/12601646.html