70分WA3个点求助哪错
查看原帖
70分WA3个点求助哪错
369089
0831沈轩毅楼主2021/11/7 13:09
#include <bits/stdc++.h>
#define MAXN 1001
using namespace std;
int f[MAXN][MAXN];
int b[MAXN][MAXN];
int a[MAXN][MAXN];
string c[MAXN];
int p,m,n;
string s = "";
bool check(int l,int r)
{
	string x = s.substr(l,r - l + 1);
	for (int i = 1;i <= n;i++)
	{
		if (x == c[i])
		{
			return true;
		}
	}
	return false;
}
int main()
{
	cin >> p >> m;
	for (int i = 1;i <= p;i++)
	{
		string ch;
		cin >> ch;
		s += ch;
	}
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		cin >> c[i];
	}
	for (int i = 0;i < s.size();i++)
	{
		for (int j = i;j < s.size();j++)
		{
			if (check(i,j))
			{
				b[i][j]++;
			}
		}
	}
	for (int i = 0;i < s.size();i++)
	{
		for (int j = 0;j < s.size();j++)
		{
			if (b[i][j] == 0)
			{
				continue;
			}
			for (int k = 0;k <= i;k++)
			{
				for (int l = j;l < s.size();l++)
				{
					a[k][l]++;
				}
			}
		}
	}
	for (int i = 0;i < s.size();i++)
	{
		for (int j = 0;j < i;j++)
		{
			a[i][j] = 0;
		}
//		for (int j = i;j < s.size();j++)
//		{
//			cout << a[i][j] << " ";
//		}
//		cout << endl;
	}
	memset(f,0,sizeof(f));
	for (int i = 0;i < s.size();i++)
	{
		f[i][0] = a[0][i];
	}
	for (int i = 1;i < m;i++)
	{
		f[i][i] = f[i - 1][i - 1] + a[i][i];
	}
	for (int j = 1;j < m;j++)
	{
		for (int i = 0;i < s.size();i++)
		{
			for (int k = j;k < i;k++)
			{
				f[i][j] = max(f[i][j],f[k][j - 1] + a[k + 1][i]);
			}
		}
	}
//	for (int i = 0;i <= m;i++)
//	{
//		for(int j = 0;j < s.size();j++)
//		{
//			cout << f[j][i] << " ";
//		}
//		cout << endl;
//	}
	cout << f[s.size() - 1][m - 1];
	return 0;
}
2021/11/7 13:09
加载中...