我调了很久了,帮我看看
查看原帖
我调了很久了,帮我看看
326254
LonginusMonkey楼主2022/7/25 12:47

代码如下

#include<bits/stdc++.h>
#define int __int128
using namespace std;
int read() {
	char ch; int n,i=1;
	ch =getchar();
	if(ch=='-') i=-1;
	else n = ch-'0';
	ch = getchar();
	while(ch >= '0' && ch <= '9') {
		n = n*10 + ch - '0';
		ch = getchar();
	}
	return n * i;
}
void write(int n) {
	if(n<0) {
		putchar('-');
		n=-n;
	}
	if(n>10) {
		write(n/10);
	}
	putchar(n%10 + '0');
}
int arr[45];
int a[45][45];
int F[45][7];
signed main() {
	int N, K;
	N= read(); K = read();
	for(int i=1; i<=N; ++i) {
		char ch; cin >> ch;
		arr[i] = ch-'0';
	}
	for(int i=1; i<=N; ++i) {
		a[i][i] = arr[i];
		for(int j=i+1; j<=N; ++j) {
			a[i][j] = a[i][j-1] * 10 + arr[j];
		}
	}
	for(int i=0; i<=N; ++i) {
		for(int j=0; j<=K; ++j) {
			F[i][j] = 1;
		}
	}
	for(int i=1; i<=N; ++i) {
		F[i][0] = a[1][i];
		for(int j=1; j<=K; ++j) {
			for(int k=j+1; k<=i; ++k) {
				F[i][j] = max(F[i][j], F[k-1][j-1] * a[k][i]);
			}
		}
	}
	write(F[N][K]);
	return 0;
}
2022/7/25 12:47
加载中...