没搞懂
查看原帖
没搞懂
534589
S_Kuroko楼主2024/9/25 20:21

这两份代码唯一区别是memset数组和手动循环数组,但是memset会出问题 100pts

#include<bits/stdc++.h>
using namespace std;
const int N=105;

int a[N],sum[N];
int f1[N][N][N],f2[N][N][N];
int n,m;



int main()
{
	for(int i=1;i<=100;i++)
	{
		for(int j=1;j<=100;j++)
		{
			for(int k=1;k<=100;k++)
			{
				f1[i][j][k]=100000000;
			}
		} 
	}
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
	}
	for(int i=n+1;i<=n*2;i++)
	{
		sum[i]=sum[i-1]+a[i-n];
	}
	for(int i=1;i<=2*n;i++)
	{
		for(int j=i;j<=2*n;j++)
		{
			f1[i][j][1]=(sum[j]-sum[i-1]+10000000)%10;
			f2[i][j][1]=(sum[j]-sum[i-1]+10000000)%10;
		}
	}
	for(int i=1;i<=2*n;i++)
	{
		for(int j=i+1;j<=2*n;j++)
		{
			for(int k=2;k<=m;k++)
			{
				for(int l=i;l<j;l++)
				{
					f1[i][j][k]=min(f1[i][j][k],f1[i][l][k-1]*f1[l+1][j][1]);
					f2[i][j][k]=max(f2[i][j][k],f2[i][l][k-1]*f2[l+1][j][1]);
				}
			}
		}
	}
	int maxx,minn=999999999;
	for(int i=1;i<=n;i++)
	{
		minn=min(minn,f1[i][i+n-1][m]);
		maxx=max(maxx,f2[i][i+n-1][m]);
	}
	cout<<minn<<endl;
	cout<<maxx<<endl;
	
	
	return 0;
} 

0pts

#include<bits/stdc++.h>
using namespace std;
const int N=105;

int a[N],sum[N];
int f1[N][N][N],f2[N][N][N];
int n,m;



int main()
{
	memset(f1,10000000,sizeof(f1));
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
	}
	for(int i=n+1;i<=n*2;i++)
	{
		sum[i]=sum[i-1]+a[i-n];
	}
	for(int i=1;i<=2*n;i++)
	{
		for(int j=i;j<=2*n;j++)
		{
			f1[i][j][1]=(sum[j]-sum[i-1]+10000000)%10;
			f2[i][j][1]=(sum[j]-sum[i-1]+10000000)%10;
		}
	}
	for(int i=1;i<=2*n;i++)
	{
		for(int j=i+1;j<=2*n;j++)
		{
			for(int k=2;k<=m;k++)
			{
				for(int l=i;l<j;l++)
				{
					f1[i][j][k]=min(f1[i][j][k],f1[i][l][k-1]*f1[l+1][j][1]);
					f2[i][j][k]=max(f2[i][j][k],f2[i][l][k-1]*f2[l+1][j][1]);
				}
			}
		}
	}
	int maxx,minn=999999999;
	for(int i=1;i<=n;i++)
	{
		minn=min(minn,f1[i][i+n-1][m]);
		maxx=max(maxx,f2[i][i+n-1][m]);
	}
	cout<<minn<<endl;
	cout<<maxx<<endl;
	
	
	return 0;
} 
2024/9/25 20:21
加载中...