代码:这道题目可以当做dfs来做(很多得26分的情况就是少判断了一种条件 例如 2 4 6 8 9 2 4 6,3个序列分别是:2 4 6 | 9 | 2 4 6 8当你判断到2 4 6觉得是第一个序列时,其实是2 4 6 8,但是它却是另一个序列,你并没有关心下一个是否匹配成功,就会陷入死循环),所以用dfs判断至最后一个元素时结束,当当前序列匹配成功时,对应总序列位置转移cnt+s[i].size()-1,再回溯,还需要用st数组来判断该序列是否被用过
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 100010;
int n, m, w[N], idx;
vector<int> g[N];
vector<int> res, now;
bool has_answer, st[N];
void dfs(int u) //u表示当前位于的位置
{
if(u >= n - 1)//因为下面的减一操作,这里也要减一
{
res = now;