社区讨论

40分求组

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

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@mi7crkn7
此快照首次捕获于
2025/11/20 19:33
4 个月前
此快照最后确认于
2025/11/20 19:33
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b) 
using namespace std;
#define ll long long
#define mod 10
ll a[205],sum[205];
ll Max[205][205][15];
ll Min[205][205][15];
inline ll read() {
    ll f = 1, x = 0; char ch;
    do { ch = getchar(); if (ch == '-')f = -1; } while (ch<'0' || ch>'9');
    do { x = x * 10 + ch - '0'; ch = getchar(); } while (ch >= '0'&&ch <= '9');
    return f * x;
}
ll calc(ll x){
	return (x%10+10)%10;
}
int main()
{
	ll n,m;scanf("%lld%lld",&n,&m);
	for(ll i=1;i<=n;i++)
		a[i]=a[i+n]=read();
	for(ll i=1;i<=n*2;i++)
		sum[i]=sum[i-1]+a[i];
	memset(Min,0x7f,sizeof(Min));
	for(ll i=1;i<=n*2;i++)
	for(ll j=i;j<=n*2;j++)
	Max[i][j][1]=Min[i][j][1]=calc(sum[j]-sum[i-1]);
	
	for(ll len=2;len<=m;len++)
	for(ll i=1;i<=2*n-len+1;i++)
	for(ll j=i+len-1;j<=2*n;j++)
	for(ll k=i+len-1;k<j;k++)
	{
		ll h=calc(sum[j]-sum[k-1]);
		Max[i][j][len]=max(Max[i][j][len],Max[i][k-1][len-1]*h);
		Min[i][j][len]=min(Min[i][j][len],Min[i][k-1][len-1]*h);
	}
	ll ans1=0x7ffffff,ans2=0;
	for(ll i=1;i<=n;i++)
	{
		ans1=min(ans1,Min[i][i+n-1][m]);
		ans2=max(ans2,Max[i][i+n-1][m]);
	}
	printf("%lld\n%lld",ans1,ans2);
	return 0;
}

回复

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

正在加载回复...