求助
查看原帖
求助
571474
future10086楼主2022/10/23 19:27

自己测试就能过,一上传就全WA

救救蒟蒻吧!!!

代码如下:

#include<iostream>
#include<cstring>
#define mod 10
using namespace std;

int N,K;

struct v{
	int n;
	int a[41];
	v(int val=0){
		memset(a,0,sizeof(a));
		for(n=1;val!=0;++n){
			a[n]+=val%mod;
			a[n+1]=val/mod;
			val/=mod;
		}--n;
	}
	v(const v& val):n(val.n){
		for(int i=1;i<=n;++i){
			a[i]=val.a[i];
		}
	}
	bool operator<(const v& val){
		if(n<val.n){
			return true;
		}else if(n>val.n){
			return false;
		}
		for(int i=n;i>0;--i){
			if(a[i]<val.a[i]){
				return true;
			}else if(a[i]>val.a[i]){
				return false;
			}
		}
		return false;
	}
	v operator*(const v& val){
		v res;
		res.n=val.n+n-1;
		for(int i=1;i<=n;++i){
			for(int j=1;j<=val.n;++j){
				res.a[i+j-1]+=a[i]*val.a[j];
			}
		}
		for(int i=1;i<=res.n;++i){
			res.a[i+1]+=res.a[i]/mod;
			res.a[i]%=mod;
		}
		if(res.a[res.n+1]){
			++res.n;
		}
		return res;
	}
	void getin(){
		n=N;
		for(int i=n;i>0;--i){
			a[i]=getchar()-'0';
		}
	}
	v getnum(const int& i,const int& j){
		v res;
		res.n=j-i+1;
		for(int k=1;k<=res.n;++k){
			res.a[k]=a[i+k-1];
		}
		return res;
	}
	void print(){
		int cnt=n;
		printf("%d",a[cnt--]);
		while(cnt>0){
			printf("%d",a[cnt--]);
		}
	}
}str,f[41][41];

int main(){
	scanf("%d%d",&N,&K);
	getchar();
	str.getin();
	
	for(int i=1;i<=N;++i){
		f[i][0]=str.getnum(1,i);
	}
	for(int i=1;i<=N;++i){
		for(int j=1;j<=i+1;++j){
			for(int k=1;k<=i-1;++k){
				f[i][j]=f[i][j]<(f[k][j-1]*str.getnum(k+1,i))?(f[k][j-1]*str.getnum(k+1,i)):f[i][j];
			}
		}
	}
	
	f[N][K].print();
	return 0;
}
2022/10/23 19:27
加载中...