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;
}
发布了39 篇原创文章 · 获赞 1 · 访问量 432
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览