Codeforces1183 E. Subsequences (easy version)(bfs)
阿新 • • 發佈:2020-12-12
題意:
題意是可放回的選擇k次,要求每次選出的子序列本質不同,總花費是每次花費的和。
資料範圍:n,k<=100
解法:
顯然先選擇長的,然後選擇短的,考慮到資料範圍非常小(<=100),
可以用bfs做,bfs的好處是佇列前面的都是長度大的.
code:
#include <bits/stdc++.h>
using namespace std;
signed main(){
int n,k;cin>>n>>k;
string s;cin>>s;
queue<string>q;
q.push(s) ;
map<string,int>mark;
mark[s]=1;
int ans=0;
while(!q.empty()&&k){
string x=q.front();q.pop();
ans+=n-x.size();
k--;
int len=x.size();
for(int i=0;i<len;i++){//列舉刪掉的位置
string temp=x.substr(0,i)+x.substr(i+1,len-i-1);
if (!mark[temp]){
mark[temp]=1;
q.push(temp);
}
}
}
if(k)ans=-1;
cout<<ans<<endl;
return 0;
}