私の父の動的プログラミングを見つけるためluogu 4059 [コード+#1]

コード: 

#include <cstdioを>   
する#include <CStringの> 
する#include <アルゴリズム> 
の#define N 3003   
の#defineっ長い長
の#define setIO(S)freopenは(S ".IN"、 "R"、STDIN)
使用して名前空間std。      
文字列str [N]。   
INT S [N]、T [N]、D [6] [6]、N、M。
LL F [N] [N]、G [N] [N]、H [N] [N]。      
INTのID(チャーC)
{ 
    IF(C == 'A')リターン1。
    IF(C == 'T')リターン2。
    IF(C == 'G')リターン3。  
    (C == 'C')リターン4であれば、         
}                            
int型のmain()
{ 
    // setIO( "入力")。   
    int型I、J、A、B; 
    scanf関数( "%sの"、STR + 1)、
    (I = 1; iが<= N。         
    scanf関数( "%s"は、STR + 1)、M = STRLEN(STR + 1)。
    用(i = 1; I <= M; ++ I)T [I] = ID(STR [I])。
    用(i = 1; iが<= 4; ++ I)
    { 
        ため(J = 1; J <= 4; ++ j)はscanf関数( "%のD"、&D [i]は[J])。  
    }         
    のscanf( "%D%dの"、&A、&B);   
    memsetの(F、-63、はsizeof(F))、memsetの(G、-63、はsizeof(G))、memsetの(時間、-63、はsizeof(H))。  
    G [1] [0] = hを[0] [1] = - A、F [0] [0] = 0;    
    用(i = 1; iは= N <; ++ I)
    { 
        ため(J = 1; J <= M; ++ J)
        {      
            F [I] [J] = MAX(F [iが- 1] [J - 1]、MAX(G [I - 1] [J - 1]、H [I - 1] [J - 1]))+ D [S [I] [T [J]。        
            G [I] [J] = MAX(MAX(F [I - 1] [J]、H [I - 1] [J]) - A、G [I - 1]〜[J] - B)。    
            H [i]は[J] = MAX(MAX(F [I] [J - 1]、G [i]は[J - 1]) - A、H [I] [J - 1] - B)。     
        }
    }      
    のprintf( "%LLDする\ n"、MAX(MAX(F [n]は[M]、G [n]は[M])、H [n]は[M]))。      
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/guangheli/p/11351280.html