摘要:
思路:与a有关的逆序对数=(在a之前出现的比a大的数+在a之后出现的比a小的数)/2当我们删除a时,减少的是 与a有关的逆序对数,当我们把a的位置填充b时增加的是 与b有关的逆序对数,可以用树状数组求这样我们相处了nmlogK的算法,显然是不能承受的(K=500000)但是我们发现当a相同时我们可以将所有的b在logn的时间内算出来,这样复杂度就成了(m+n)logK了完全可以承受~PS:不知道为什么我和别人用一样的思路我的代码怎么比他们快3倍啊。。求解释。。(卖萌。。。。)View Code 1 #include <cstdio> 2 #include <cstring&g 阅读全文
摘要:
题意:题意:给出两行数,求上下匹配的最多组数是多少。匹配规则1,匹配对的数字必须相同2.每个匹配必须有且只能有一个匹配与之相交叉,且相交叉的两组匹配数字必须不同2,一个数最多只能匹配一次思路:其实凭感觉瞎写呗。类似于最长公共子序列的方程。dp[i][j]=max(dp[i-1][j-1],dp[i-1][j],dp[i][j-1],dp[pi-1][pj-1]+2) 表示前a的前i个数和b的前j个数匹配的最大值依次含义分别是:i,j都不匹配;i不参与匹配;j不参与匹配,i,j和前面的某个符合要求的字符匹配View Code 1 #include <cstdio> 2 #includ 阅读全文