#1 #5AC,其他全WA,求调

P1043 [NOIP2003 普及组] 数字游戏

### 总共有两个错误 $$ 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


|