这两份代码唯一区别是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;
}