求助高精
查看原帖
求助高精
633466
LiaoYF1楼主2022/7/20 08:54
#include <bits/stdc++.h>
//#define int __uint128_t
using namespace std;
struct bigint{
	int num[105]={0},len;
	bigint operator*(const bigint b) const{
		bigint c;
		memset(c.num,0,sizeof(c.num));
		int len3=len+b.len+1;
		for (int i=1;i<=len;i++) {
			for (int j=1;j<=b.len;j++){
				c.num[i + j - 1]+=num[i]*b.num[j];
			}
		}
		for (int i=1;i<=len3;i++) {
			c.num[i + 1]+=c.num[i]/10;
			c.num[i]%=10;
		}
		c.len=len3;
		return c;
	}
	bigint operator+(const int x) const{
		bigint c;
		memset(c.num,0,sizeof(c.num));
		int len3=100;
		for(int i=1;i<=len3;i++){
			c.num[i]=num[i];
		}
		c.num[1] += x;
		for (int i=1;i<=len3;i++) {
			c.num[i + 1] += c.num[i]/10;
			c.num[i]%=10;
		}
		c.len=len3;
		return c;
	}
	bool operator<(const bigint b) const {
		if(len!=b.len){
			return len<b.len;
		}
		for(int i=len;i>=1;i--){
			if(num[i] > b.num[i]) return 0;
		}
	}
	bigint operator-(const bigint b) const{
		bigint c;
		memset(c.num,0,sizeof(c.num));
		int len3=max(len,b.len);
		for (int i=1;i<=len3;i++) {
			c.num[i] = num[i] - b.num[i];
			if (c.num[i] < 0) {
				c.num[i]+=10;
				c.num[i + 1]-=1;
			}
		}
		c.len=len3;
		return c;
	}
};
void print(bigint t) {
	while (t.len!=1&&t.num[t.len]==0)t.len--;
	while (t.len){
		cout<<t.num[t.len];
		t.len--;
	}
}
bigint f[45][45];
int s[45];
int n,k;
string s1;
bigint js(int x,int y){
	bigint sum;long long t=1;
	memset(sum.num,0,sizeof(sum.num));
	for(int i=y;i>=x;i--){
		
		sum=sum+s[i]*t;
		t*=10;
	}
	return sum;
}
signed main(){
	cin>>n>>k>>s1;
	for(int i=0;i<s1.length();i++){
		s[i+1]=s1[i]-'0';
	}
	//cout<<s[4]<<endl;
	for(int i=1;i<=n;i++){
		f[0][i]=js(1,i);
		//cout<<endl;
	}
	for(int i=1;i<=k;i++){
		for(int j=1;j<=n;j++){
			for(int m=j;m>=i;m--){
				//(f[i-1][l-1]*js(l,j)).print();
				//cout<<js(l,j).len<<" ";
				//cout<<l<<" "<<j<<endl;
				//cout<<" ";
				//cout<<i<<" "<<j<<endl;
				
				f[i][j]=max(f[i][j],f[i-1][m-1]*js(m,j));
				//f[i][j].print();
				//cout<<"\n";
			}
		}
	}
	print(f[k][n]);
	return 0;
}

帮本蒟蒻看看我的高精结构体哪里错了,经本人测试,dp没错,开__int128_t能得80pts

2022/7/20 08:54
加载中...