社区讨论
玄关求调 dp WA on #19,36
AT_abc344_d [ABC344D] String Bags参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @ltn2lnw7
- 此快照首次捕获于
- 2024/03/11 23:00 2 年前
- 此快照最后确认于
- 2024/03/12 14:18 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
string T, ss, x;
int n, m, cnt;
map<string, int> mp[105];
map<string, bool> f;
map<string, int>::iterator it;
bool check(string s) {
if (s.length() > T.length()) return 0;
for (int i = 0; i < s.length(); i++)
if (s[i] != T[i]) return 0;
return 1;
}
int main() {
cin >> T;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> m;
for (it = mp[i - 1].begin(); it != mp[i - 1].end(); ++it) if(f[it->first]) mp[i][it->first] = mp[i - 1][it->first];
for (int j = 1; j <= m; j++) {
cin >> ss;
if (check(ss) && !f[ss]) {
f[ss] = 1;
mp[i][ss] = 1;
continue;
}
for (it = mp[i - 1].begin(); it != mp[i - 1].end(); ++it) {
x = it->first + ss;
if (check(x)) {
if (!f[x]) f[x] = 1, mp[i][x] = INT_MAX;
if (check(it->first) && f[it->first])
mp[i][x] = min(mp[i][x], mp[i - 1][it->first] + 1);
}
//cout << i << " " << x << " " << mp[i][x] << endl;
}
}
}
cout << (f[T] ? mp[n][T] : -1);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...