如果你ABC D RE
  • 板块学术版
  • 楼主h0pe
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/9 22:09
  • 上次更新2024/3/10 08:48:37
查看原帖
如果你ABC D RE
1007175
h0pe楼主2024/3/9 22:09
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
string t;
int n,a[101];
string s[101][11];
int dp[101][101];
int main()
{
	for(int i=0;i<=100;i++)
	{
		for(int j=0;j<=100;j++)
		{
			dp[i][j]=1e9;
		}
	}
	cin>>t;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		for(int j=1;j<=a[i];j++)
		{
			cin>>s[i][j];
		}
	}
	dp[0][0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=t.size();j++)
		{
			dp[i][j]=dp[i-1][j];
		}
		for(int j=1;j<=a[i];j++)
		{
			for(int k=0;k<=t.size()-s[i][j].size();k++)
			{
				string temp=t.substr(k,s[i][j].size());
				if(temp==s[i][j])dp[i][k+s[i][j].size()]=min(dp[i-1][k]+1,dp[i][k+s[i][j].size()]);
			}
		}
	}
	if(dp[n][t.size()]!=1e9)cout<<dp[n][t.size()];
	else cout<<-1;
}

此代码中,t.size()-s[i][j].size()都是unsigned int,可能溢出
转换为int就能避免问题

2024/3/9 22:09
加载中...