求助
  • 板块学术版
  • 楼主sdsswyd
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/12 22:14
  • 上次更新2024/7/13 09:14:48
查看原帖
求助
855490
sdsswyd楼主2024/7/12 22:14

202406GESP6级第一题(0分)(dfs)

//#pragma G++ optimize(3)(不用管)
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[25],d=0,n,m,sum;
int dp[100005],ans;
int dfs(int k,int sum,int s){
	if(k==s)return sum;
	if(dp[k]!=0)return dp[k];
	for(int i=1;i<=s;i++){
		if(k+b[i]<=m){
			ans=max(ans,dfs(k+i,sum+b[i],s));
		}
	}
	return dp[k]=ans;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	string s;
	cin>>m>>s;
	int k=0;
	for(int i=2;i<s.size();i++){
		if(s[i]=='c'&&s[i-1]=='b'&&s[i-2]=='a'){
			k++;
		}
		else{
			if(k>=1){
				a[++d]=k;			
			}
			k=0;
		}
	}
	if(k>=1)a[++d]=k;
//	cout<<d<<endl;
	for(int i=1;i<=d;i++){
//		cout<<a[i]<<endl;
		ans=0;
		memset(dp,0,sizeof(dp));
		sum+=dfs(0,0,a[i]);
	}
	cout<<sum;
	return 0;
}
2024/7/12 22:14
加载中...