社区讨论

没搞懂

P1043[NOIP 2003 普及组] 数字游戏参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m1hu5nao
此快照首次捕获于
2024/09/25 20:22
去年
此快照最后确认于
2024/09/25 20:52
去年
查看原帖
这两份代码唯一区别是memset数组和手动循环数组,但是memset会出问题 100pts
CPP
#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
CPP
#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;
} 

回复

2 条回复,欢迎继续交流。

正在加载回复...