20pts求调
查看原帖
20pts求调
1023793
yaodiguoan楼主2024/10/30 14:04
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize(2)
//#pragma GCC optimize(3, "Ofast", "inline")
#define hh putchar('\n')
#define kg putchar(' ')
#define debug puts("debug")
#define int long long
//#define int __int128
namespace quickread{
	template<typename T> void read(T &x){
		x=0;char c=getchar();T neg=0;
		while(!isdigit(c)) neg|=!(c^'-'),c=getchar();
		while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
		if(neg) x=(~x)+1;
	}
	template<typename T> void write(T x){
		if(x<0) putchar('-'),x=~x+1;
		if(x>9) write(x/10);
		putchar(x%10^48);
	}
}
using namespace quickread;
const int N=110,inf=2147483647;
int n,m,a[N],dp1[N][N][N],dp2[N][N][N],ans1=inf,ans2;
int mod(int x){return (x%10+10)%10;}
signed main(){
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	read(n),read(m);
	for(int i=1;i<=n;++i) read(a[i]),a[i+n]=i;
	for(int i=1;i<=n*2;++i) a[i]+=a[i-1];
	for(int l=1;l<=n*2;++l)
		for(int r=l;r<=n*2;++r)
			dp1[1][l][r]=dp2[1][l][r]=mod(a[r]-a[l-1]);
	for(int len=2;len<=m;++len)
		for(int l=1;l<=2*n;++l)
			for(int r=l+len-1;r<=2*n;++r)
				dp1[len][l][r]=inf,dp2[len][l][r]=-inf;
	for(int len=2;len<=m;++len)
		for(int l=1;l<=2*n;++l)
			for(int r=l+len-1;r<=2*n;++r)
				for(int k=l+len-2;k<r;++k) 
					dp1[len][l][r]=min(dp1[len][l][r],mod(a[r]-a[k])*dp1[len-1][l][k]),
					dp2[len][l][r]=max(dp2[len][l][r],mod(a[r]-a[k])*dp2[len-1][l][k]);
		
	for(int l=1;l<=n;++l) ans1=min(ans1,dp1[m][l][l+n-1]),ans2=max(ans2,dp2[m][l][l+n-1]);
	write(ans1),hh,write(ans2);
	return 0;
}

2024/10/30 14:04
加载中...