RE 求调!
查看原帖
RE 求调!
672281
InversionShadow楼主2024/1/29 11:06

rt.

/bx /bx /bx

#include <bits/stdc++.h>

using namespace std;

const int N = 30;

int n, dp[N][N], p[N][N], t, a[N], b[N], inf;

int DP(int l, int r) {
  if (l == r) {
    dp[l][r] = 0;
    return 0;
  }
  if (dp[l][r] != inf) {
    return dp[l][r];
  }
  for (int k = l; k < r; k++) {
    if (dp[l][r] > DP(l, k) + DP(k + 1, r) + a[l] * b[k] * b[r]) {
      dp[l][r] = DP(l, k) + DP(k + 1, r) + a[l] * b[k] * b[r];
      p[l][r] = k;
    }
  }
}

void solve(int l, int r) {
  if (l == r) {
    cout << "A" << r;
    return ;
  }
  cout << "(";
  solve(l, p[l][r]);
  cout << " x ";
  solve(p[l][r] + 1, r);
  cout << ")";
}

int main() {
  while (cin >> n && n) {
    memset(p, 0, sizeof(p));
    memset(dp, 63, sizeof(dp));
    inf = dp[1][1];
    for (int i = 1; i <= n; i++) {
      cin >> a[i] >> b[i];
    }
    DP(1, n);
    cout << "Case " << ++t << ": "; 
    solve(1, n);
    cout << '\n';
  }
  return 0;
}
2024/1/29 11:06
加载中...