P1043NOIP2003 40pts
查看原帖
P1043NOIP2003 40pts
607952
ZHANGGUIZHI楼主2024/10/31 18:16
#include<bits/stdc++.h>

using namespace std;
int n, m, a[103], s[103];
int maxx = INT_MIN, minn = INT_MAX;
int f[110][24], d[110][24];
void pre() {
    for (int i = 1; i <= 2 * n; i++) a[i] = a[i] % 10;
    for (int i = 1; i <= 2 * n; i++) a[i] = (a[i] + 10) % 10;
}
void dfs(int t) {
    for (int i = t; i <= t + n - 1; i++)
        for (int j = 1; j <= m; j++)
            f[i][j] = 1e9, d[i][j] = 0;
    for (int i = t; i <= t + n - 1; i++)
        f[i][0] = d[i][0] = (s[i] - s[t - 1]) % 10;
    for (int j = 1; j <= m; j++)
        for (int i = t + j; i <= t + n - 1; i++)
            for (int k = t; k < i; k++) {
                f[i][j] = min(f[i][j], f[k][j - 1] * ((s[i] - s[k]) % 10));
                d[i][j] = max(d[i][j], d[k][j - 1] * ((s[i] - s[k]) % 10));
                //cout << f[i][j] << ' ' << f[k][j - 1] << ' ' << (s[i] - s[k]) % 10 << ' ' << i << ' ' << j << ' ' << k << '\n';
            }
    minn = min(minn, f[t + n - 1][m - 1]);
    maxx = max(maxx, d[t + n - 1][m - 1]);
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> a[i], a[i + n] = a[i];
    pre();
    for (int i = 1; i <= 2 * n; i++)
        s[i] = s[i - 1] + a[i];
    for (int i = 1; i <= n; i++) dfs(i);
    cout << minn << '\n' << maxx << '\n';
    return 0;
}
/*
6 5
-2 -5 -1 -6 0 4 
*/
2024/10/31 18:16
加载中...