1. 程式人生 > 其它 >Codeforces1183 E. Subsequences (easy version)(bfs)

Codeforces1183 E. Subsequences (easy version)(bfs)

題意:

在這裡插入圖片描述
題意是可放回的選擇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; }