区间qp 过不了样例但可以过4个点 玄关求调
查看原帖
区间qp 过不了样例但可以过4个点 玄关求调
1190741
Violet_Evergardon楼主2024/10/5 17:13
#include<bits/stdc++.h>
using namespace std;
const int N=150;
long long n,m,q[N];
long long B[N][N][N],S[N][N][N]; //[s,t]中分k段最值  B->big  S->small
long long minans,maxans;
long long mod(long long a){
	return ((a%10)+10)%10;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)	cin>>q[i],q[i+n]=q[i];
	for(int i=2;i<=n*2;i++) q[i]+=q[i-1]; 
	memset(S,127,sizeof(S));
	minans=S[1][1][1];
	
	for(int i=1;i<=n*2;i++)
		for(int j=i;j<=n*2;j++)
			B[i][j][1]=S[i][j][1]=mod(q[j]-q[i-1]);
			
	for(int k=2;k<=m;k++)
		for(int i=1;i<=n*2;i++)
			for(int j=i+k-1;j<=n*2;j++)
				for(int l=i+k-2;l<j;l++){
					B[i][j][k]=max(B[i][l][k-1]*mod(q[j]-q[l]),B[i][j][k]);
					S[i][j][k]=min(S[i][l][k-1]*mod(q[j]-q[l]),S[i][j][k]);
					S[i][j][k]=mod(S[i][j][k]);
				}
				
	for(int i=1;i<=n;i++){
		minans=min(S[i][i+n-1][m],minans);
		maxans=max(B[i][i+n-1][m],maxans);
	}
	cout<<minans<<endl<<maxans<<endl;
	return 0;
}
2024/10/5 17:13
加载中...