牛客春招刷题训练营 - 2025.4.25 题解

活动地址:牛客春招刷题训练营 - 编程打卡活动

Easy a的翻转

简要题意

对十进制数 翻转数位得到 ,求

Solution

简单模拟即可。

Code

void R()
{
	int a,b=0;
	cin>>a;
	for (int t=a;t;t/=10)
		b=b*10+t%10;
	cout<<a+b<<'\n';
	return;
}

Medium 斐波那契数列

简要题意

求斐波那契数列第 项。

Solution

递推式为 ,直接递推即可。

Code

void R()
{
	int n,lst=0,now=1;
	cin>>n;
	while (n--)
	{
		swap(lst,now);
		now+=lst;
	}
	cout<<lst<<'\n';
	return;
}

Hard 括号区间匹配

简要题意

给一个仅包含 (,),[,] 的字符串,求插入多少个括号能使该括号串合法配对。

Solution

表示使子串 合法配对的最小代价,有转移:

即为答案。

Code

void R()
{
	constexpr int inf=1e9;
	string s;
	cin>>s;
	int n=s.size();
	vector<vector<int>> dp(n,vector<int>(n,inf));

	auto match=[&](char a,char b)->bool
	{
		return (a=='('&&b==')')||(a=='['&&b==']');
	};

	auto dfs=[&](auto &self,int l,int r)->int
	{
		if (l>r) return 0;
		if (dp[l][r]!=inf) return dp[l][r];
		if (l==r) return dp[l][r]=1;
		dp[l][r]=min(dp[l][r],self(self,l+1,r-1)+(!match(s[l],s[r]))*2);
		dp[l][r]=min(dp[l][r],self(self,l+1,r)+1);
		dp[l][r]=min(dp[l][r],self(self,l,r-1)+1);
		for (int k=l;k<r;k++)
			dp[l][r]=min(dp[l][r],self(self,l,k)+self(self,k+1,r));
		return dp[l][r];
	};

	cout<<dfs(dfs,0,n-1)<<'\n';
	return;
}
#牛客春招刷题训练营#
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-18 00:16
某工业 嵌入式软件工程师 20K×13薪 本科其他
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务