1 solutions

  • 1
    @ 2025-8-22 9:41:05
    #include<bits/stdc++.h>
    using namespace std;
    const int N=35,M=1e5+10;
    int a[N],f[M]; 
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++) //获取n个"abc"得到的权值 
    	{
    		cin>>a[i];
    	}
    	int m;
    	cin>>m;
    	string s;
    	cin>>s;
    	s=" "+s;
    	for(int i=1;i<=m;i++)
    	{
    		f[i]=f[i-1];//不选最后一个
    		for(int j=1;j<=n;j++)
    		{
    			if(i-3*j+1<=0) break;//越界 
    			int l=i-3*j+1;
    			if(s.substr(l,3)=="abc") //说明是当前可以选择 
    			{
    				f[i]=max(f[i],f[l]+a[j]);
    			} 
    			else break;//说明不可以选择 
    		} 
    	}
    	cout<<f[m]<<endl; 
    	return 0;
    }
    
    
    • 1

    Information

    ID
    2187
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    2
    Accepted
    2
    Uploaded By