zoj 1642 - Match for Bonus
2014-09-27 19:23
357 查看
题目:裸的最大公共子序列。
分析:dp,LCS。
f[ i ][ j ] = max( f[ i-1 ][ j ], f[ i ][ j-1 ] ) {a[ i ] != b[ j ]}
f[ i ][ j ] + 1 {a[ i ] == b[ j ]}
说明:(2011-09-19 09:38)。
分析:dp,LCS。
f[ i ][ j ] = max( f[ i-1 ][ j ], f[ i ][ j-1 ] ) {a[ i ] != b[ j ]}
f[ i ][ j ] + 1 {a[ i ] == b[ j ]}
说明:(2011-09-19 09:38)。
#include <iostream> #include <cstdlib> #include <cstring> using namespace std; int CtoI( char ch ) { if ( ch >= 'a' && ch <= 'z' ) return ch - 'a'; else return ch - 'A' + 26; } int Value[ 54 ]; char A[ 2001 ],B[ 2001 ]; short LCS[ 2001 ][ 2001 ]; int main() { int n,v;char c; while ( cin >> n ) { for ( int i = 0 ; i < n ; ++ i ) { cin >> c >> v; Value[ CtoI( c ) ] = v; } cin >> A >> B; int A_Len = strlen( A ); int B_Len = strlen( B ); memset( LCS, 0, sizeof( LCS ) ); for ( int i = 1 ; i <= A_Len ; ++ i ) for ( int j = 1 ; j <= B_Len ; ++ j ) { LCS[ i ][ j ] = max( LCS[ i-1 ][ j ], LCS[ i ][ j-1 ] ); if ( A[ i-1 ] == B[ j-1 ] && LCS[ i ][ j ] < LCS[ i-1 ][ j-1 ] + Value[ CtoI( A[ i-1 ] ) ] ) LCS[ i ][ j ] = LCS[ i-1 ][ j-1 ] + Value[ CtoI( A[ i-1 ] ) ]; } cout << LCS[ A_Len ][ B_Len ] << endl; } return 0; }
相关文章推荐
- ZOJ 1642 Match for Bonus
- ZOJ 1642 Match for Bonus(dp)
- zoj1642 Match for Bonus(DP)
- 子串数据ZOJ 1642 Match for Bonus
- ZOJ 1642 Match for Bonus (DP)
- zoj1642——Match for Bonus
- ZOJ 1642 Match for Bonus(LCS)
- zoj 1642 Match for Bonus
- ZOJ 1642 Match for Bonus
- ZOJ 1642 Match for Bonus
- zoj 1642 Match for Bonus
- zoj 1642 Match for Bonus(动态规划)
- ZOJ 1642 Match for Bonus
- zoj 1642 Match for Bonus[dp,lcs]
- ZJU 1642 Match for Bonus
- Match for Bonus
- ZOJ 2315 New Year Bonus Grant(贪心)
- no match for ‘operator=’ 等号两端 不匹配
- error LNK2038: mismatch detected for \'_ITERATOR_DEBUG_LEVEL\': value \'0\' doesn\'t match value \'2\' in *.obj
- ZOJ 2315 New Year Bonus Grant(贪心)