这题标签是状态压缩和记忆化搜索,但是我暴搜竟然过了!!
我的代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 10 , INF = 1e9;
int id[130],n = 5 , m , a[N][N];
vector <int> e[N][N];
int dfs(int x){
int ret = 0;
for (int i = 1;i <= n;i++){
if (e[x][i].size() > a[x][i]){
int w = e[x][i][a[x][i]];
++a[x][i];
ret = max(ret , w + dfs(i));
--a[x][i];
}
}
return ret;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
id['A'] = 1;
id['E'] = 2;
id['I'] = 3;
id['O'] = 4;
id['U'] = 5;
cin >> m;
string s;
for (int i = 1;i <= m;i++){
cin >> s;
e[id[s[0]]][id[s[s.size() - 1]]].push_back(s.size());
}
for (int i = 1;i <= n;i++){
for (int j = 1;j <= n;j++){
sort(e[i][j].begin() , e[i][j].end() , greater <int>());
}
e[0][i].push_back(0);
}
cout << dfs(0);
return 0;
}
最慢的点43ms,总用时83ms,甚至比题解的某些状态压缩还快。我认为至少要把暴力卡掉吧?