zoj3034 The Bridges of Kolsberg(DP)
2011-08-20 09:26
447 查看
/*
经典模型:最长公共子序列+字符串处理
*/
View Code
经典模型:最长公共子序列+字符串处理
*/
View Code
#include <stdio.h> #include <stdlib.h> #include <string.h> #define max( a, b ) ((a)>(b)?(a):(b)) char LeftOS[ 1001 ][ 12 ]; char RightOS[ 1001 ][ 12 ]; int LeftID[ 1001 ]; int LeftV[ 1001 ]; int RightID[ 1001 ]; int RightV[ 1001 ]; char OSList[ 1001 ][ 12 ]; int Match[ 1001 ][ 1001 ]; int Count[ 1001 ][ 1001 ]; int Number = 0; int ID( char * Data ) { for ( int i = 0 ; i < Number ; ++ i ) if ( !strcmp( OSList[ i ], Data ) ) return i; strcpy( OSList[ Number ], Data ); return Number ++; } int main() { int t,n,m; char City[ 12 ]; while ( ~scanf("%d",&t) ) while ( t -- ) { scanf("%d",&n); for ( int i = 1 ; i <= n ; ++ i ) scanf("%s %s %d",City,LeftOS[ i ],&LeftV[ i ]); scanf("%d",&m); for ( int i = 1 ; i <= m ; ++ i ) scanf("%s %s %d",City,RightOS[ i ],&RightV[ i ]); Number = 0; for ( int i = 1 ; i <= n ; ++ i ) LeftID[ i ] = ID( LeftOS[ i ] ); for ( int i = 1 ; i <= m ; ++ i ) RightID[ i ] = ID( RightOS[ i ] ); memset( Match, 0, sizeof( Match ) ); memset( Count, 0, sizeof( Count ) ); for ( int i = 1 ; i <= n ; ++ i ) for ( int j = 1 ; j <= m ; ++ j ) { if ( Match[ i ][ j ] < Match[ i-1 ][ j ] ) { Match[ i ][ j ] = Match[ i-1 ][ j ]; Count[ i ][ j ] = Count[ i-1 ][ j ]; } if ( Match[ i ][ j ] < Match[ i ][ j-1 ] ) { Match[ i ][ j ] = Match[ i ][ j-1 ]; Count[ i ][ j ] = Count[ i ][ j-1 ]; } if ( LeftID[ i ] == RightID[ j ] && Match[ i ][ j ] < Match[ i-1 ][ j-1 ] + LeftV[ i ] + RightV[ j ] ) { Match[ i ][ j ] = Match[ i-1 ][ j-1 ] + LeftV[ i ] + RightV[ j ]; Count[ i ][ j ] = Count[ i-1 ][ j-1 ] + 1; } } printf("%d %d\n",Match[ n ][ m ],Count[ n ][ m ]); } return 0; }
相关文章推荐
- zoj 3034 - The Bridges of Kolsberg
- zoj 3034 - The Bridges of Kolsberg
- 2014 Super Training #2 F The Bridges of Kolsberg --DP
- ZOJ 3223 Journey to the Center of the Earth DP+dijstra 二维最短路
- ZOJ 2771 Get Out of the Glass(DP)
- POJ 2241 The Tower of Babylon(dp)
- 例题9-2 UVa437 The Tower of Babylon(DP:DAG中的最长路)
- ZOJ 3872 Beauty of Array DP 15年浙江省赛D题
- ZOJ 2110 Tempter of the Bone (DFS+减枝)
- Poj 2151 Check the difficulty of problems (概率DP)
- poj 2553 zoj 1979 The Bottom of a Graph(强联通分量 Tarjan)
- POJ 2151 Check the difficulty of problems(概率dp啊)
- ZOJ 1074 To the Max【DP】【最大子段和】
- ZOJ 3256 Tour in the Castle(插头DP-按行递推—矩阵)
- UVA 437 The Tower of Babylon DP
- UVa437 - The Tower of Babylon(DAG上的dp)
- 13年山东省赛 The number of steps(概率dp水题)
- HDU 5542 The Battle of Chibi (离散化+树状数组优化DP)
- ZOJ1090 The Circumference of the Circle
- uva 437 The Tower of Babylon(dp,记忆化搜索)