DFS有两个测试点超时,看来只能用动态规划做了,待补。
DFS代码:
#include <vector>
#include <cstdio>
using namespace std;
void dfs(vector<int> &v, int i, vector<int> &ret, int &maxSize)
{
if(i == v.size())
{
if(maxSize < ret.size()) maxSize = ret.size();
return;
}
if(ret.size() + v.size() - i < maxSize) return; // 剪枝
if(ret.size() == 0 || v[i] >= ret[ret.size() - 1])
{
ret.push_back(v[i]);
dfs(v, i+1, ret, maxSize);
ret.pop_back();
dfs(v, i+1, ret, maxSize);
}
else
dfs(v, i+1, ret, maxSize);
}
int main()
{
int N, M, L;
scanf("%d", &N);
scanf("%d", &M);
int priority[300] = {0};
for (int i = 1; i <= M; ++i)
{
int tmp;
scanf("%d", &tmp);
priority[tmp] = i;
}
vector<int> v;
scanf("%d", &L);
for (int i = 0; i < L; ++i)
{
int tmp;
scanf("%d", &tmp);
if(priority[tmp] > 0) v.push_back(priority[tmp]);
}
int maxSize = 0;
for (int i = 0; i < v.size(); ++i)
{
vector<int> ret;
dfs(v, i, ret, maxSize);
}
printf("%d", maxSize);
return 0;
}