




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解题报告:Crossed Matchings题目来源: poj 1692解法或类型: 动态规划作者:陈子沣DescriptionThere are two rows of positive integer numbers. We can draw one line segment between any two equal numbers, with values r, if one of them is located in the first row and the other one is located in the second row. We call this line segment an r-matching segment. The following figure shows a 3-matching and a 2-matching segment. We want to find the maximum number of matching segments possible to draw for the given input, such that: 1. Each a-matching segment should cross exactly one b-matching segment, where a != b . 2. No two matching segments can be drawn from a number. For example, the following matchings are not allowed. Write a program to compute the maximum number of matching segments for the input data. Note that this number is always even. InputThe first line of the input is the number M, which is the number of test cases (1 = M = 10). Each test case has three lines. The first line contains N1 and N2, the number of integers on the first and the second row respectively. The next line contains N1 integers which are the numbers on the first row. The third line contains N2 integers which are the numbers on the second row. All numbers are positive integers less than 100.OutputOutput should have one separate line for each test case. The maximum number of matching segments for each test case should be written in one separate line.解题思路:将相互交叉的两组匹配记作一个基本单元。根据题意就是要找到尽可能多的相互不重叠的基本单元的组合。考虑以下两种情况。解法一:一个基本单元左上和右下两个数已经确定,那么最合算的情况有两种。一种是第一行的两数距离最近;另一种是第二行的两数距离最近。其它的情况所占的“空间”必然包含着两种情况的一种,因此不用考虑。将所有这样的基本单元找出,以最左边两个数从左到右的顺序存储在数组Match(Matchi0Matchi3分别记录第i个基本单元中左上、右上、左下、右下四个数的位置)中。将fj记作以第j个基本单元为最左边基本单元的最优解中单元的个数。具有最优子结构。动态方程为:fi=maxfj+1 | Matchi1Matchj0且Matchi3Matchj2最后解为maxfi*2。解法二:一个基本单元的最右边两个数已经确定,那么最合算的情况就是第一行与第二行两个数的距离都最近。其它情况所占“空间”必然包含这种情况,因此不用考虑。将fij记作第一行第i个数及其左边第二行第j个数及其左边的最优解中基本单元的个数。具有最优子结构。动态方程为:fij=maxfij-1,fi-1j,fli-1lj-1+1(li、lj分别为最合算情况基本单元左上、左下两个数的位置)最后解为fN1N2*2。优化:可以发现对于每一个i、j都要单独计算相应的li、lj,这是时间上的浪费。将f1ij记作第二行第j个数左边距离最近的与第一行第i个数相等的数的位置。类似的将f2ij记作第一行第i个数左边距离最近的与第二行第j个数相等的数的位置。具有最优子结构。动态方程为:f1ij=j-1(r1i=r2j-1) f1ij-1(r1i!=r2j-1)f2ij=i-1(r1i-1=r2j) f1i-1j(r1i-1!=r2j)用预处理得到的f1ij、f2ij代替需要每次计算的lj、li。数据结构:用两个数组r11N1、r21N2分别存储第一行与第二行的数。其余详见解题思路。时空分析:解法一:时间:O(N1*N2)2)空间:O(N1*N2)解法二:时间:O(N1*N2)空间:O(N1*N2)源程序:解法一:#include const int MAXN=101;int M,N1,N2,r1MAXN,r2MAXN;void main()bool flag;int i,j,li,lj,t,s,max,fMAXN*MAXN*2,MatchMAXN*MAXN*24;scanf(%d,&M);while(M)s=0;scanf(%d%d,&N1,&N2);for(i=1;i=N1;i+) scanf(%d,&r1i);for(i=1;i=N2;i+) scanf(%d,&r2i);for(i=1;iN1;i+)for(j=2;j=N2;j+)if(r1i=r2j)flag=true;for(li=i+1;(li0)&flag;lj-)if(r1li=r2lj)&(r1li!=r1i)s+;Matchs0=i;Matchs1=li;Matchs2=lj;Matchs3=j;flag=false;if(flag=false) t=Matchs2; else t=0;flag=true;for(lj=j-1;(ljt)&flag;lj-)for(li=i+1;(li=N1)&flag;li+)if(r1li=r2lj)&(r1li!=r1i)s+;Matchs0=i;Matchs1=li;Matchs2=lj;Matchs3=j;flag=false;for(i=1;i0;i-)max=0;for(j=i+1;j=s;j+)if(Matchi1Matchj0)&(Matchi3Matchj2)&(maxfj) max=fj;fi+=max;max=0;for(i=1;i=s;i+)if(maxfi) max=fi;printf(%dn,max*2);M-;解法二未优化:#include const int MAXN=101;int M,N1,N2,r1MAXN,r2MAXN;void main()int i,j,li,lj,max,fMAXNMAXN=0;scanf(%d,&M);while(M)scanf(%d%d,&N1,&N2);for(i=1;i=N1;i+) scanf(%d,&r1i);for(i=1;i=N2;i+) scanf(%d,&r2i);for(i=2;i=N1;i+)for(j=2;j=N2;j+)max=fij-1;if(max0)&(r1li!=r2j);li-);if(li0) for(lj=j-1;(lj0)&(r1i!=r2lj);lj-);if(li0)&(lj0)&(fli-1lj-1+1max) max=fli-1lj-1+1;fij=max;printf(%dn,fN1N2*2);M-;解法二优化:#include const int MAXN=101;int M,N1,N2,r1MAXN,r2MAXN;void main()int i,j,max,fMAXNMAXN=0,f1MAXNMAXN,f2MAXNMAXN;scanf(%d,&M);while(M)scanf(%d%d,&N1,&N2);for(i=1;i=N1;i+) scanf(%d,&r1i);for(i=1;i=N2;i+) scanf(%d,&r2i);f121=0;for(i=2;i=N1;i+)for(j=2;j=N2;j+)if(r1i=r2j-1) f1ij=j-1;else f1ij=f1ij-1;f212=0;for(j=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北医技工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏家禽饲养员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏仓库管理员一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西计算机操作员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东防疫员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东汽车驾驶与维修员五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东有线广播电视机务员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东地图绘制员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽中式烹调师二级(技师)历年参考题库典型考点含答案解析
- 2025年银行金融类-金融考试-银行业专业人员中级(法规+银行管理)历年参考题库含答案解析
- 先天性甲状腺功能减退症诊治指南解读课件
- 2025至2030中国裸眼3D行业产业运行态势及投资规划深度研究报告
- 检修安全监护管理制度
- 产科工作管理制度
- 初中历史教师业务考试试题及答案
- 导尿管相关尿路感染预防与控制试题(附答案)
- 中医烧伤课件
- 2025-2030中国水下混凝土行业市场发展趋势与前景展望战略研究报告
- GB/T 30134-2025冷库管理规范
- 2025年心理咨询师基础理论知识测试卷:心理咨询心理学理论体系试题
- 急诊患者安全管理
评论
0/150
提交评论