大佬,我找最小值的数组fs加上abs就过了,不知道为什么
查看原帖
大佬,我找最小值的数组fs加上abs就过了,不知道为什么
540066
zwb3_1415926楼主2023/10/16 19:01
#include<bits/stdc++.h>
using namespace std;
int n,m,l[1000],fb[60][60][10],fs[60][60][10],ma=-1e9,mi=1e9;
int mod(int s)
{
	if (s>=0) return s%10;
	else
	{
		int q=abs(s);
		return 10-q%10;
	}
}
int main()
{
//	freopen("GAME.in","r",stdin);
//	freopen("GAME.out","w",stdout);
	cin>>n>>m;
	for (int i=1;i<=n;i++){cin>>l[i];l[i+n]=l[i];}
	for (int c=0;c<n;c++)
	{
		int s[1000]={ },sum[1000]={ };
		for (int i=1;i<=n;i++) s[i]=l[i+c],sum[i]=sum[i-1]+s[i];
		memset(fb,0,sizeof(fb));
		memset(fs,0x3f,sizeof(fs));
		for (int i=1;i<=n;i++)
			for (int j=i;j<=n;j++) fb[i][j][1]=mod(sum[j]-sum[i-1]),fs[i][j][1]=mod(sum[j]-sum[i-1]); 
		for (int deep=2;deep<=m;deep++)
		{
			for (int len=1;len<n;len++)
				for (int i=1;i<=n;i++)
				{
					int j=i+len;
					if (j>n) break;
					for (int k=1;deep-k>=1;k++)
					{
						int m=i;
						while (m<j)
						{
							fs[i][j][deep]=min(abs(fs[i][m][k]*fs[m+1][j][deep-k]),fs[i][j][deep]);
							fb[i][j][deep]=max(fb[i][m][k]*fb[m+1][j][deep-k],fb[i][j][deep]);
							m++;
						}
					}
				}
		}
		ma=max(ma,fb[1][n][m]);
		mi=min(mi,fs[1][n][m]);
	}
	cout<<mi<<endl<<ma;
	return 0;
}
2023/10/16 19:01
加载中...