#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int a[110];
int n,m;
int t;
long long maxn=-1<<30,minn=1<<30;
int mod(int a)
{
int c=floor(a/10);
while(a-c*10<0) c--;
return a-c*10;
}
void dfs(int now,int num,int step)
{
if(num*pow(9,step)<=maxn && num>=minn) return;
if(step==1)
{
num*=mod(a[t]-a[now-1]);
if(num>maxn) maxn=num;
if(num<minn) minn=num;
return;
}
for(int i=now;i<=t-step+1;i++)//枚举下一个起点,要留step个点给后面
{
dfs(i+1,num*mod(a[i]-a[now-1]),step-1);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=2*n;i++)
{
a[i]+=a[i-1];
}
for(int i=1;i<=n;i++)
{
t=i+n-1;//每一次的终点
dfs(i,1,m);
}
cout<<minn<<endl;
cout<<maxn<<endl;
return 0;
}
洛谷 P1043 数字游戏
最新推荐文章于 2023-08-04 20:59:13 发布