デイリー質問day24パンチ
分析
文字列+ DP
その値は3つの値の最も小さいFのための注意深い観察、[I] [J]。
- F [I-1]〜[J] + K // [i]の空間に対応
- F [I] [J-1] + K // B [j]が空間に対応
- F [I-1] [J-1] + ABS([I-1] -b [J-1])[i]はBに対応する[j]を//我々は、最終的に動的伝達方程式を得ること、及び答えはで[長さ] F [長さb]です。
また、単に初期化するために注意を払います。
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4の#include <アルゴリズム> 5の#include <cmath> 6 の#define INT長い長い 7 の#define MAXN 2000 + 10 8 使用して 名前空間STD。 9インラインint型リード() 10 { 11 INT X = 0 。 12 ブール F = 1 。 13 チャー C = GETCHAR()。 14 のために(C = GETCHAR()!; isdigit(c)参照)場合(C == ' - ')、F = 0 。 15 のために(; isdigit(C); C = GETCHAR())x =(x << 3)+(X << 1)+ C- ' 0 ' 。 16 であれば(F) 、リターンX。 17 リターン 0 - X。 18 } 19インラインボイド書き込み(INT X) 20 { 21 であれば(X < 0){のputchar(' - '); X = - X;} 22 場合(X> 9)、書き込み(X / 10 )。 23 のputchar(Xの%10 + ' 0 ' )。 24 } 25 CHAR [MAXN]、B [MAXN]。 26 int型 K、レナ= 1、LENB = 1 。 27 INT DP [MAXN] [MAXN]。 28インラインINT min_four(int型のx、int型のy、int型 Z、INT O) 29 { 30 リターン分(MIN(x、y)は、分(Z、O))。 31 } 32インラインINT図(チャー X、チャーY) 33 { 34 INT NX = X- ' 0 '、NY = Y- ' 0 ' 。 35の リターン ABS(NX- NY)。 36 } 37 )(主符号付き 38 { 39 のmemset(DP、127、はsizeof (DP))。 40 一方、(1 ) 41 { 42 INT に = GETCHAR()。 43 もし(中 == " \ n個' ) 44 { 45 lena-- 。 46 ブレーク; 47 } 48 [レナ] = で; 49 レナ++ ; 50 } 51 ながら、(1 ) 52 { 53 INT に = GETCHAR()。 54 であれば(で == ' の\ n ' ) 55 { 56 lenb-- 。 57 ブレーク; 58 } 59 B [LENB] = で; 60 LENB ++ ; 61 } 62 K = リード()。 63 DP [ 0 ] [ 0 ] = 0 。 64 のために(int型 I = 1 ; I <=レナ; I ++)は、DP [I] [ 0 ] = DP [I- 1 ] [ 0 ] + K。 65 のために(int型 I = 1 ; I <= LENB; I ++)は、DP [ 0 ] [I] = DP [ 0 ] [I- 1 ] + K。 66 のために(int型 I = 1 ; I <=レナI ++ ) 67 のための(INT J = 1 ; J <= LENB; J ++ ) 68 { 69 DP [I] [J] = min_four(DP [I] [J] 、DP [I- 1 ] [J] + K、DP [I]、[J- 1 ] + K、DP [I- 1 ] [J- 1 ] + 図([I]、B [J])) ; 70 } 71 ライト(DP [レナ] [LENB])。 72 リターン 0 ; 73 }
論文をギャングしてください(とにかく、私はそれが論文を何を意味するのか知りません)