高精0分……
查看原帖
高精0分……
658786
STUDENT00楼主2022/10/12 20:34

好久没写高精了,一写0分?!

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,k;
string num,sum[40][40],dp[40][10];
string pro(string sa,string sb){
	int la,lb,lc,a[1010]={0},b[1010]={0},c[2010]={0};
	string sc="";
	la=sa.length();
	lb=sb.length();
	for(int i=0;i<la;i++) a[i]=sa[la-i-1]-48;
	for(int i=0;i<lb;i++) b[i]=sb[lb-i-1]-48;
	for(int i=0;i<la;i++){
		for(int j=0;j<lb;j++) c[i+j]+=a[i]*b[j];
	}
	lc=la+lb-2;
	for(int i=0;i<lc;i++){
		if(c[i]>9){
			c[i+1]+=c[i]/10;
			c[i]%=10;
		}
	}
	if(c[lc]) lc++;
	for(int i=lc-1;i>=0;i--) sc+=char(c[i]+48);
	return sc;
}
string maxx(string a,string b){
	if(a.length()>b.length()) return a;
	else if(a.length()<b.length()) return b;
	else return max(a,b);
}
int main(){
	scanf("%d%d",&n,&k);
	cin>>num;
	for(int i=0;i<n;i++){
		sum[i][i]=num[i];
		for(int j=i+1;j<n;j++) sum[i][j]=sum[i][j-1]+num[j];
	}
	for(int i=0;i<n;i++) dp[i][0]=sum[0][i];
	for(int p=1;p<=k;p++){
		for(int i=p;i<n;i++){
			for(int j=p-1;j<i;j++) dp[i][p]=maxx(dp[i][p],pro(dp[j][p-1],sum[j+1][i]));
		}
	}
	cout<<dp[n-1][k];
	return 0;
}
2022/10/12 20:34
加载中...