数字游戏
#include<cstdio> #define maxn 0x3f3f3f3f using namespace std; int n,m,a[50],f[51][51][3],g[51][51][3]; int main() { scanf("%d%d",&n,&m); for(int i=0;i<=n-1;i++)scanf("%d",&a[i]); for(int i=0;i<=n-1;i++){ int tmp=0,t10; for(int j=1;j<=n;j++){ tmp+=a[(i+j-1)%n]; if(tmp>=0)t10=tmp%10; else t10=(10-((-1)*tmp)%10)%10; f[i][j][0]=t10; f[i][j][1]=t10; g[i][j][0]=t10; g[i][j][1]=t10; } } for(int k=1;k<=m-1;k++){ for(int i=0;i<=n-1;i++){ for(int j=k+1;j<=n;j++){ int m1=maxn,m2=-maxn; for(int t=k;t<=j-1;t++){ if(m1>f[i][t][1]*f[(i+t)%n][j-t][0])m1=f[i][t][1]*f[(i+t)%n][j-t][0]; if(m2<g[i][t][1]*g[(i+t)%n][j-t][0])m2=g[i][t][1]*g[(i+t)%n][j-t][0]; }f[i][j][2]=m1,g[i][j][2]=m2; } } for(int i=0;i<=n-1;i++){ for(int j=1;j<=n;j++){ f[i][j][1]=f[i][j][2]; g[i][j][1]=g[i][j][2]; } } }int m1=maxn,m2=-maxn; for(int i=0;i<=n-1;i++){ if(m1>f[i][n][1])m1=f[i][n][1]; if(m2<g[i][n][1])m2=g[i][n][1]; }printf("%d\n%d\n",m1,m2); return 0; }