タイトル説明
ショーに参加する準備ができてギタリスト。彼はいつもショーの中に同じボリュームを使用することを好きではないので、彼は彼がボリューム一度変更する必要があるすべての曲の前に決めました。ショーが始まる前に、彼はすでに彼はボリュームがある変更したい各曲の開始前に読んでリストを、行っています。すべての変更のボリューム、彼を低下させることができる増加することを選択できます。
整数によって記述ボリューム。整数入力ファイルbeginLevel、ギターの最大のボリュームの代わりにギターのボリューム、整数maxLevelの先頭に代わって。ボリュームはゼロ未満でもmaxLevelを超えることはできません。私はギターの音量を変更したい最初の曲がある前に戻る入力nは与えられた整数のC1、C2、C3、...、CN、と始まりを表します。
ギタリストが最大のボリューム最後の曲でプレイしたい、あなたのタスクは、最大のボリュームがある見つけることです。
入力形式
最初の行は三つの整数N、beginLevel、maxLevel続きます。
第n行整数C1、C2、C3、...、CNに続きます。
データスケール:
1 <= N <= 50、1 <= CI <= maxLevel 1 <= maxLevel <= 1000、0 <= beginLevel <= maxLevel
出力フォーマット
最後の曲の最大ボリューム出力性能。レベルがギタリストを下回った場合に回避又は0 maxLevel、出力-1よりも高くすることができません。
サンプル入力と出力
3 5 10
5 3 7
10
[問題解決のアイデア]
の種類に到達する01ナップザック問題
F [I] [J]:歌を私はボリュームjを達成することができる前に、[I] [j]は[I] [j]が1に達成表す= F 0を達成することができない= F
私はアイテムの音量を取っ表し、ボリュームがダウン取らないi番目の項目を表し
バックパック、バックパックのテンプレート01タイトル(上位と下位と制約)のためのボリューム容量
初期条件は:F [0] [beginlevel] = 1、性能がフロントbeginlevelに到達できません
【コード】
1の#include <cstdioを>
2の#include <iostreamの>
3の#include <アルゴリズム>
4 使って 名前空間STDを、
5 int型N、begin_level、MAX_LEVEL。
6 ブール F [ 1005 ] [ 1005 ]。
7 int型 C [ 55 ]。
8 INT メイン(){
9 // freopenは( "1877.in"、 "R"、STDIN)。
10 // freopenは( "1877.out"、 "W"、STDOUT)。
11 のscanf(" %D%D%D "、&N、&begin_level、&MAX_LEVEL)。
0 ] [begin_level] = 真。
13 のために(登録をint i = 1 ; iがn = <; iは++ )
14 のscanf(" %dの"、&C [I])。
15 のために(登録をint i = 1 ; iがn = <; iは++ )
16 用(登録INT J = 0 ; jは<= MAX_LEVELあり、j ++ ){
17 であれば(F [I- 1 ] [J]){
18 であれば( JC [I]> = 0)[I] [JC [I] = F 真。
19 もし[I] [J + C [i]は] = F(J + C [i]は<= MAX_LEVEL)真。
20 }
21 }
22 用(登録INT I = MAX_LEVEL; I> = 0 ; i-- )
23 であれば{([N] [i]がF)
24 のprintf(" %Dを\ n " 、I)。
25 リターン 0 ;
26 }
27 のprintf(" -1の\ n " );
28 リターン 0 ;
29 }