萌 新 求 调 ( 会 关 注 的 )
查看原帖
萌 新 求 调 ( 会 关 注 的 )
91956
Dreamweaver楼主2021/3/15 19:22
#include<bits/stdc++.h>
using namespace std;
#define mod 1000007
#define inf 999999999
#define re register
#define maxn 100000
string a;
int dp[110][110];
int main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
	cin>>a;
	int n=a.size();
	memset(dp,0x3f,sizeof(dp));
	for(re int i=n;i>=1;i--)
		for(re int j=i;j<=n;j++)
		{
			dp[i][j]=j-i+1;
			int l=j-i+1;
			for(re int k=i;k<sqrt(l);k++)
			{
				int p=1;
				if(l%k)	continue;
				for(re int o=i;o<=j-k+1;o+=k)
				{
					if(a[i-1]!=a[o-1])
					{
						p=0;
						break;
					}
				}
				if(p==0)
					continue;
				int lp=l/k;
				int ll; 
				if(lp<10)
					 ll=1;
				else
					 ll=log10(l)+1;
				dp[i][j]=min(dp[i][j],dp[i][i+k-1]+2+ll);
			}
				for(re int k=i;k<j;k++)
					dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]);
		}
	for(int i=1;i<=n;i++,puts(""))
		for(int j=1;j<=n;j++)
			cout<<dp[i][j]<<' ';
	cout<<dp[1][n];
	return 0;
}

/*
AAAAAAAAAABABAB
1 2 3 4 4 4 4 4 4 5 6 /6/ 6 7 6
0 1 2 3 4 5 5 6 5 6 5 6 5 6 5
0 0 1 2 3 4 5 6 7 8 9 10 11 6 7
0 0 0 1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 1 2 3 4 5 6 7 8 9 10 11
0 0 0 0 0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0 1 2 3 4 5 6
0 0 0 0 0 0 0 0 0 0 1 2 3 4 5
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4
0 0 0 0 0 0 0 0 0 0 0 0 1 2 3
0 0 0 0 0 0 0 0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
6
*/
2021/3/15 19:22
加载中...