1 条题解
-
0Guest LV 0 MOD
-
0
#include<bits/stdc++.h> using namespace std; int n,m,ans1=INT_MIN,ans2=INT_MAX; int num[101],s[101],maxn[101][101][11],minn[101][101][11]; int mod(int k) { return (k%10+10)%10; } int dfs1(int l,int r,int t) { if(maxn[l][r][t]!=-1) return maxn[l][r][t]; if(t==1) return maxn[l][r][t]=mod(s[r]-s[l-1]); int ans=-1; for(int k=l; k<r; k++) for(int i=1; i<t; i++) ans=max(ans,dfs1(l,k,i)*dfs1(k+1,r,t-i)); return maxn[l][r][t]=ans; } int dfs2(int l,int r,int t) { if(minn[l][r][t]!=-1) return minn[l][r][t]; if(t==1) return minn[l][r][t]=mod(s[r]-s[l-1]); int ans=0x7fffffff; for(int k=l; k<r; k++) for(int i=1; i<t; i++) ans=min(ans,dfs2(l,k,i)*dfs2(k+1,r,t-i)); return minn[l][r][t]=ans; } int main() { memset(maxn,-1,sizeof(maxn)); memset(minn,-1,sizeof(minn)); scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { scanf("%d",&num[i]); num[i+n]=num[i]; } for(int i=1; i<=2*n; i++) s[i]=s[i-1]+num[i]; for(int i=1; i<=n; i++) { dfs1(i,i+n-1,m); dfs2(i,i+n-1,m); } for(int i=1; i<=n; i++) { ans1=max(ans1,maxn[i][i+n-1][m]); ans2=min(ans2,minn[i][i+n-1][m]); } printf("%d\n%d",ans2,ans1); return 0; }
- 1