博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ】1692 Crossed Matchings
阅读量:6826 次
发布时间:2019-06-26

本文共 1620 字,大约阅读时间需要 5 分钟。

经典DP,想了很久,开始想复杂了。

#include 
using namespace std;#define MAXNUM 100int mymax(int a, int b) { return (a>b) ? a:b;}int main() { int case_n; int a_n, b_n; int i, j; int a[MAXNUM], b[MAXNUM]; int match[MAXNUM][MAXNUM]; int max_a2b[MAXNUM][MAXNUM], max_b2a[MAXNUM][MAXNUM]; cin >>case_n; while (case_n--) { cin >>a_n>>b_n; for (i=1; i<=a_n; ++i) cin >>a[i]; for (i=1; i<=b_n; ++i) cin >>b[i]; for (i=0; i<=a_n; ++i) { match[i][0] = 0; max_a2b[i][0] = 0; } for (i=0; i<=b_n; ++i) { match[0][i] = 0; max_b2a[i][0] = 0; } for (i=1; i<=a_n; ++i) for (j=1; j<=b_n; ++j) { if (a[i] == b[j-1]) max_a2b[i][j] = j-1; else max_a2b[i][j] = max_a2b[i][j-1]; } for (i=1; i<=b_n; ++i) for (j=1; j<=a_n; ++j) { if (b[i] == a[j-1]) max_b2a[i][j] = j-1; else max_b2a[i][j] = max_b2a[i][j-1]; } int pos_b, pos_a; for (i=1; i<=a_n; ++i) { for (j=1; j<=b_n; ++j) { match[i][j] = mymax(match[i-1][j], match[i][j-1]); pos_b = max_a2b[i][j]; pos_a = max_b2a[j][i]; if (pos_b>0 && pos_a>0 && a[i] != b[j]) { match[i][j] = mymax(match[i][j], match[pos_a-1][pos_b-1]+2); } } } cout <
<

 

转载于:https://www.cnblogs.com/bombe1013/p/3576869.html

你可能感兴趣的文章
李洪强iOS开发之Block和协议
查看>>
Python 调用snmp自定义OID实现监控
查看>>
Spark Streaming概念学习系列之SparkStreaming性能调优
查看>>
hdu 5375 - Gray code(dp) 解题报告
查看>>
Android推送 百度云推送 入门篇
查看>>
Java正则表达式过滤出字母、数字和中文
查看>>
vector删除元素与清除内存空洞
查看>>
Activex感知网页刷新关闭事件
查看>>
Libvirt中windows虚拟机的动态内存管理
查看>>
Xamarin开发笔记—设备类&第三方弹窗的使用和注意事项
查看>>
用外部物理路由器时使用Neutron dhcp-agent提供的metadata服务(by quqi99)
查看>>
P2023 [AHOI2009]维护序列
查看>>
requireJS文件夹
查看>>
苹果电脑 剪切文件 文件夹 快捷键
查看>>
paramiko远程
查看>>
云计算的概念
查看>>
C# 开源框架(整理)
查看>>
C语言的作用域规则
查看>>
Storm编程入门API系列之Storm的Topology多个Executors数目控制实现
查看>>
关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
查看>>