0分QwQ
查看原帖
0分QwQ
377969
george0929楼主2023/4/3 21:55

Rt,本来六十,套完高精度后全WA了,求助QwQ.

没加高精度:

#include<bits/stdc++.h>
using namespace std;
long long f[1000][1000],n,k;
string s;
long long ff(int s1,int s2){
    long long num=0,t=1;
    for(int i=s2;i>=s1;i--){
		num+=(s[i]-48)*t;
		t*=10;
	}
    return num;
}
int main(){
    cin>>n>>k>>s;
    for(int i=0;i<n;i++){
		f[0][i]=ff(0,i);
	}
    for(int i=1;i<=k;i++){
        for(int j=1;j<n;j++){
            for(int l=j;l>=i;l--){
            	//cout<<f[i-1][l-1]<<"*"<<ff(l,j)<<"="<<f[i-1][l-1]*ff(l,j)<<endl;
                f[i][j]=max(f[i-1][l-1]*ff(l,j),f[i][j]);
            }
        }
    }
    cout<<f[k][n-1];
}

加完高精度:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int f[1000][1000][90],n,k,len[1000][1000];
string s;
void init(int a[],int l,int r){
	int pos=r-l;
	for(int j=l;j<=r;j++){
		a[pos]=s[j]-'0';
		pos--;
	}
	return;
}
bool cmp(int a[],int b[]){
	for(int i=89;i>=0;i--){
		if(a[i]&&(!b[i])){
			return true;
		}else if((!a[i])&&b[i]){
			return false;
		}else if(a[i]>b[i]){
			return true;
		}else if(a[i]<b[i]){
			return false;
		}
	}
	return true;
}
void copy(int a[],int b[]){
	for(int i=0;i<90;i++){
		b[i]=a[i];
	}
	return;
}
signed main(){
    cin>>n>>k>>s;
    for(int i=0;i<1000;i++){
    	for(int j=0;j<1000;j++){
    		len[i][j]=1;
		}
	}
    for(int i=0;i<n;i++){
    	init(f[0][i],0,i);
    	len[0][i]=i+1;
	}
    for(int i=1;i<=k;i++){
        for(int j=1;j<n;j++){
            for(int l=j;l>=i;l--){
            	int a[45]={},res[90]={};
            	init(a,l,j);
            	for(int x=0;x<j-l+1;x++){
            		for(int y=0;y<len[i-1][l-1];y++){
            			res[x+y]+=a[x]*f[i-1][l-1][y]; 
					}
				}
				int pl=len[i-1][l-1]+j-l;
				for(int i2=0;i2<pl;i2++){
					if(res[i2]>=10){
						res[i2+1]+=res[i2]/10;
						res[i2]%=10;
						if(i2==pl-1){
							pl++;
						}
					}
				}
//            	for(int y=len[i-1][l-1]-1;y>=0;y--){
//            		cout<<f[i-1][l-1][y]; 
//				}
//				cout<<"*";
//            	for(int x=j-l;x>=0;x--){
//            		cout<<a[x];
//				}
//				cout<<"=";
//				for(int i2=pl-1;i2>=0;i2--){
//					cout<<res[i2];
//				}
//				cout<<endl;
				if(cmp(res,f[i][j])){
					copy(res,f[i][j]);
				}
                //f[i][j]=max(f[i-1][l-1]*ff(l,j),f[i][j]);
            }
        }
    }
    int ff=1;
    for(int i=85;i>=0;i--){
    	if(ff&&(!f[k][n-1][i])){
    		continue;
		}
		ff=1;
    	cout<<f[k][n-1][i];
	}
}
2023/4/3 21:55
加载中...