社区讨论
没搞懂
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 条回复,欢迎继续交流。
正在加载回复...