这道题,我乱写。。题都读错了,没看到q,p只能在两个不同的取。错误算法还对(100)了。
正解:
f[i][j]:表示第i个数,q有j个没有匹配,的p没有匹配数.
二分总答案数。只要最后满足f[1+n][mid] >= mid 就好,处理完n个数,q有mid个没有匹配,p有大于等于mid个没有匹配.一定可以匹配出mid个。
对于第i个数,如果它可以分成的p的数量和q 的数量之和大于总答案数,肯定i不能分成这么多个,分成这么多个的话会自己和自己配对,转移时保证p的数量和q 的数量之和小于等于总答案数。
标程:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 55, maxm = 2222;
int f[maxn][maxm], b[maxn], c[maxn][maxn], a[maxn], p1, p2;
int main()
{
int i, j, ll = 0, rr