Codeforces Round #570 (Div. 3) E - Subsequences (easy version) (广搜)
题意:从一个字符串中找到k个不重复的子序列,删除的字符数之和最小为多少
最先想到的肯定是只删除一个,接着就是只删除两个。。。应该想到使用队列按顺序检验字符串,有点像那个在房子旁边安排人的题,那个也是从最靠近的部分开始贪心,还有就是string 中使用erase这个函数,如果不希望原字符串改变,一定要先把原字符串拷贝一下QAQ
signed main()
{
int n,k;cin>>n>>k;
string c;cin>>c;
queue<string>q;
set<string>s;
q.push(c);s.insert(c);
int ans=0;
while(q.size()&&s.size()<k)
{
c=q.front();q.pop();
for(int i=0;i<c.size();++i)
{
string v=c;
v.erase(i,1);
if(s.count(v)==0)
{
q.push(v),s.insert(v);
ans+=n-(v.size());
if(s.size()==k) break;
}
}
}
if(s.size()<k) cout<<"-1"<<endl;
else cout<<ans<<endl;
//stop;
return 0;
}

浙公网安备 33010602011771号