B题
处理出A数组选i个(1<=i<=n)的字典序最大的子序列,把B的也处理出来
在枚举用A的x个和用B的l-x个,将答案存下
最后排序输出最大的即可

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>

using namespace std;
typedef long long ll;
int n, m, l;
ll a[510], b[510];
vector<ll> v1[510], v2[510];
vector<ll> v[510];
bool vis[510];

int main() {
    scanf("%d%d%d", &n, &m, &l);
    for (int i = 1; i <= n; i++)scanf("%lld", &a[i]);
    for (int i = 1; i <= m; i++)scanf("%lld", &b[i]);
//处理A
    for (int i = 1; i <= n; i++) {
        int k = 1;
        for (int s = 1; s <= i; s++) {
            int ma = 0;
            for (int j = k; j <= n - i + s; j++) {
                if (a[j] > ma) {
                    ma = a[j];
                    k = j + 1;
                }
            }
            v1[i].push_back(ma);
        }
    }
//处理B
    for (int i = 1; i <= m; i++) {
        int k = 1;
        for (int s = 1; s <= i; s++) {
            int ma = 0;
            for (int j = k; j <= m - i + s; j++) {
                if (b[j] > ma) {
                    ma = b[j];
                    k = j + 1;
                }
            }
            v2[i].push_back(ma);
        }
    }
//合并
    int ll = max(0, l - m), rr = min(n, l);
    for (int i = ll; i <= rr; i++) {
        int j1 = 0, j2 = 0;
        while (j1 < v1[i].size() || j2 < v2[l - i].size()) {
            if (j1 == v1[i].size()) {
                v[i].push_back(v2[l - i][j2]);
                j2++;
            } else if (j2 == v2[l - i].size()) {
                v[i].push_back(v1[i][j1]);
                j1++;
            } else if (v1[i][j1] > v2[l - i][j2]) {
                v[i].push_back(v1[i][j1]);
                j1++;
            } else if (v1[i][j1] < v2[l - i][j2]) {
                v[i].push_back(v2[l - i][j2]);
                j2++;
            } else {
                int jj1 = j1, jj2 = j2;
                while (jj1 < v1[i].size() && jj2 < v2[l - i].size() && v1[i][jj1] == v2[l - i][jj2]) {
                    jj1++;
                    jj2++;
                }
                if (jj1 == v1[i].size())v[i].push_back(v2[l - i][j2]), j2++;
                else if (jj2 == v2[l - i].size())v[i].push_back(v1[i][j1]), j1++;
                else if (v1[i][jj1] > v2[l - i][jj2]) {
                    v[i].push_back(v1[i][j1]);
                    j1++;
                } else {
                    v[i].push_back(v2[l - i][j2]);
                    j2++;
                }
            }
        }
    }
    sort(v + ll, v + rr + 1);
    for (auto i:v[rr])printf("%lld ", i);
    return 0;
}