トピックの背景
金種(例えば、{1、3})を設定Nスタンプのグループ、および上限Kに - Kは、エンベロープスタンプを固定することができる表します。連続Mに1から最大投稿郵便料金を計算
タイトル説明
例えば、3点、1点のスタンプがあると仮定し、あなたが5枚の切手まで収めることができます。簡単に5点(ライン上のスタンプによって1分)まで送料1を掲載し、次の郵便料金は困難ではありません。
6 = 3 + 3
7 = 3 + 3 + 1
8 = 3 + 3 + 1 + 1
9 = 3 + 3 + 3
10 = 3 + 3 + 3 + 1
11 = 3 + 3 + 3 + 1 + 1
12 = 3 + 3 + 3 + 3
13 = 3 + 3 + 3 + 3 + 1
しかし、1分または5分3 14分の使用が不可能スタンプ切手を掲載します。したがって、収集及び上部スタンプK = 5の両方に対して、答えがM = 13です。【最大のリミット3S点です]
ヒント:14が出てこないので、上限は13であるので、ない15
入力形式
1行目:二つの整数、KおよびN. K(1 <= Kは<= 200)スタンプの総数が利用可能です。N(1 <= N <= 50)は、切手の数です。
二行目..ファイルの末尾:Nの整数、各行15は、N個の金種切手、各切手の宗派ではない10,000人以上のすべて一覧表示されます。
出力フォーマット
1行目:午後1時から整数Kが掲載切手の数を超えない利用できるの連続したセットを開始します。
サンプル入力と出力
入力#1
5 2 1 3
出力#1
13
説明/ヒント
NOCOWからタイトル翻訳。
USACOトレーニングセクション3.1
問題の解決策
が、この問題は完全にナップザック問題ですが、より多くのアウト困難はその問題をしたいです。タイトルfで必要に応じて直接選択[i]は十分ではありません。F [i]は、所望の金種Iに到達するためにスタンプの最小数です。そのような状態遷移方程式は:F [J] =分( [J] F、F [J - ] + 1)、 すなわち、シートの選択された数の公称値は、の選択に減少、又は選択されないことができれば。
1の#include <iostreamの> 2の#include <stdio.hの> 3の#include <math.h>の 4の#include <アルゴリズム> 5の#include < 文字列・H> 6 7 使って 名前空間STDを、 8 9 のconst int型 MAXN = 2000005 。 10 int型 A、N、K、[MAXN] F。 11 12 のint main()の 13 { 14 CIN >> K >> N。 15 のために(int型 I = 0 ; iがMAXNを<; I ++は) 16 { 17。 F [I] = 1111111 ; 18である } 19。 F [ 0 ] = 0 、 20である ため(int型私は= 1 ; I <= N; Iは++ ) 21である { 22は CIN >> A; 23である ため(INT J = A ; J <= MAXN; J ++ ) 24 { 25 IF(F [J - A] + 。1 <= K)/ * 範囲で使用されるスタンプの数* / 26 { 27 F [J] =([J - A] F [j]がF、+分1 )。 28 } 29 } 30 } 31 のための(int型 i = 1 ; iは++; iはMAXNを< ) 32 { 33 であれば(F [I] == 1111111 ) 34 { 35 COUT << iは、 - 1 << ENDLと、 36 ブレーク; 37 } 38 } 39 リターン(0 )。 40 }