【HAOI2012】ボリュームコントロール

タイトル説明

ショーに参加する準備ができてギタリスト。彼はいつもショーの中に同じボリュームを使用することを好きではないので、彼は彼がボリューム一度変更する必要があるすべての曲の前に決めました。ショーが始まる前に、彼はすでに彼はボリュームがある変更したい各曲の開始前に読んでリストを、行っています。すべての変更のボリューム、彼を低下させることができる増加することを選択できます。

整数によって記述ボリューム。整数入力ファイル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よりも高くすることができません。

サンプル入力と出力

入力#1
3 5 10 

5 3 7

出力#1
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 }

 

おすすめ

転載: www.cnblogs.com/66dzb/p/11257285.html