萌新求助!!!
查看原帖
萌新求助!!!
561529
Infinite_Energy楼主2023/1/9 16:50

样例没有过,输出0 81,调一个下午了QAQ

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[210],sum[210],ffmax[210][210][210],ffmin[210][210][210];
long long ansmax=-9999999999,ansmin=9999999999;
long long dfsmax(long long l,long long r,long long k){
	if(ffmax[l][r][k]!=-1){
		return ffmax[l][r][k];
	}
	if(k==1){
		ffmax[l][r][k]=(sum[r]-sum[l-1])%10;
		return ffmax[l][r][k];
	}
	long long tmp=-9999999999;
	for(int i=l;i<=r;i++){
		for(int j=1;j<=k-1;j++){
			tmp=max(tmp,dfsmax(l,i,j)*dfsmax(i+1,r,k-j));
		}
	}
	ffmax[l][r][k]=tmp;
	return ffmax[l][r][k];
}
long long dfsmin(long long l,long long r,long long k){
	if(ffmin[l][r][k]!=-1){
		return ffmin[l][r][k];
	}
	if(k==1){
		ffmin[l][r][k]=(sum[r]-sum[l-1])%10;
		return ffmin[l][r][k];
	}
	long long tmp=9999999999;
	for(int i=l;i<=r;i++){
		for(int j=1;j<=k-1;j++){
			tmp=min(tmp,dfsmin(l,i,j)*dfsmin(i+1,r,k-j));
		}
	}
	ffmin[l][r][k]=tmp;
	return ffmin[l][r][k];
}
long long read(){
	char ch=getchar();
	long long sgn=1,x=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			sgn=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar();
	}
	return x*sgn;
}
void write(long long n,bool p){
	if(n<0){
		putchar('-');
		n=-n;
	}
	if(n==0){
		if(p==true){
			putchar('0');
		}
		return;
	}
	write(n/10,0);
	putchar(n%10+'0');
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]<0){
			a[i]+=10000;
		}
		a[i+n]=a[i];
	}
	for(int i=1;i<=2*n;i++){
		sum[i]=sum[i-1]+a[i];
	}
	for(int i=0;i<=200;i++){
		for(int j=0;j<=200;j++){
			for(int k=0;k<=200;k++){
				ffmax[i][j][k]=-1;
				ffmin[i][j][k]=-1;
			}
		}
	}
	for(int i=1;i<=n;i++){
		dfsmax(i,i+n-1,m);
		dfsmin(i,i+n-1,m);
	}
//	for(int i=1;i<=n;i++){
//		for(int j=i;j<=n;j++){
//			cout<<"i:"<<i<<" "<<"j:"<<j<<" ";
//			cout<<ffmin[i][j][m]<<endl;
//		}
//	}
	for(int i=1;i<=n;i++){
		ansmax=max(ansmax,ffmax[i][i+n-1][m]);
		ansmin=min(ansmin,ffmin[i][i+n-1][m]);
//		if(ffmin[i][i+n-1][m]==0){
//			cout<<"fuck";
//		}
	}
	cout<<ansmin<<endl<<ansmax<<endl;
	return 0;
}


2023/1/9 16:50
加载中...