2018
T1舗装道路
差動水の問題は、うまく結論を押してください。
書式#include <cstdioを> する#include <アルゴリズム> 使用して 名前空間はstdを、 INT [ 100005 ]、D [ 100005 ]、ansz、ansf。 INT のmain() { int型のn; scanf関数(" %のD "、&N) 以下のために(int型 i = 1 ; iが<= N; iは++ ) (scanf関数を" %のD "、および[I])、dは[I] = [I] -a [I- 1 ]。 以下のために(int型 i = 1 ; iは++; iが= N < ) { 場合(D [i]が<0)ansf- = D [i]は、 他 ansz + = Dの[i]は、 } のprintf(" %d個の\ n " 、MAX(ansz、ansf))。 リターン 0 ; }
T2の金融システム
私はそれが数学の問題だと思った、と後に、非常に興味深いフルバックパックシンプルな変形をDPが判明しました。
メモリアレイ添字fの各数は、発生した表しTRUE、FALSEは表現できないことを示します。
trueに初期化F [0]。
書式#include <cstdioを> する#include <CStringの> の#include <アルゴリズム> 使用して 名前空間はstdを、 int型のn、[ 205 [F]、25005 ]、T。 INT メイン() { scanf関数(" %のD "、&T)。 一方、(T-- ) { int型 ANS = 0、MAXN = 0 。 scanf関数(" %のD "、&N) 以下のために(int型 i = 1 ; iは++; iが= N < ) (scanf関数を"%のD "、&A [I])、MAXN = MAX(MAXN、A [I]); ソート(A + 1、A + 1 + N-); のmemset(F、0、はsizeof (F)); F [ 0 ] = trueに ; // 添字fが過剰が存在するか否かの数表す ために(INT I = 1 ; I <= N; I ++は) { IF(F [I])を続行 ; // すぎる続けるがある場合 ++ ANS; // デフォルトではありませんアウト のための(int型 J = A [I]; J <= MAXN; J ++ ) F [J]最大値=(F [JA [I]、F [J]); // JA [i]が発生した場合には、割り当ての真の転送である、すなわちjが発生する可能性が保証できる } のprintf(" %のD \ N- " 、ANS); } 戻り 0 ; }