### 总共有两个错误
$$
1. 输出结果的时候要把最小值和 0 取max,题面里也说过要输出两个非负整数,即更正成以下形式:
$$
```cpp
cout << max(minn, 0) << '\n' << maxn;
```
------------
$$
2. 第四层循环枚举分界点时 k 的下界是 i ,而不是 i + 1,即更正成以下形式:
$$
```
for(int k = i;k < j;k++){
f1[i][j][l] = min(f1[i][j][l],f1[i][k][l - 1] * mod(b[j] - b[k]));
f2[i][j][l] = max(f2[i][j][l],f2[i][k][l - 1] * mod(b[j] - b[k]));
}
```
by bulopi @ 2024-02-18 11:52:08
## 完整代码如下
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
// #define int long long
int a[N],f1[N][N][15],f2[N][N][15],n,m;//f1存最小,f2存最大
long long b[N];
int mod(int x){
return (x % 10 + 10) % 10;
}
signed main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
cin >> a[i];
a[i + n] = a[i];
}
for(int i = 1;i <= 2 * n;i++){
b[i] = a[i] + b[i - 1];
}
memset(f1,0x3f,sizeof f1);
for(int i = 1;i <= 2 * n;i++){
for(int j = 1;j <= 2 * n;j++){
f1[i][j][1] = f2[i][j][1] = mod(b[j] - b[i - 1]);
}
}
for(int l = 2;l <= m;l++){
for(int i = 1;i <= n;i++){
for(int j = i + 1;j < 2 * n;j++){
for(int k = i;k < j;k++){
f1[i][j][l] = min(f1[i][j][l],f1[i][k][l - 1] * mod(b[j] - b[k]));
f2[i][j][l] = max(f2[i][j][l],f2[i][k][l - 1] * mod(b[j] - b[k]));
}
}
}
}
int minn = 0x3f,maxn = -0x3f;
for(int i = 1;i <= n;i++){
minn = min(minn,f1[i][i + n - 1][m]);
maxn = max(maxn,f2[i][i + n - 1][m]);
}
cout << max(minn, 0) << '\n' << maxn;
return 0;
}
```
------------
~~能求个关吗?QvQ~~
by bulopi @ 2024-02-18 11:54:26
@[bulopi](/user/948361) 已A,感谢大佬帮助,已关注(笔芯)
by yzysdTNT @ 2024-03-09 08:07:57
@[bulopi](/user/948361) dalao,为什么会出现负数的情况啊,不是先模10以后再乘的么
by luoguerepp @ 2024-03-12 21:46:50