NOIP問題へのグループの研究管理ソリューションを改善

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 ; 
}

 

おすすめ

転載: www.cnblogs.com/valentino/p/11743402.html