MAGCARI

MCM

Jan 2nd, 2023
886
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.87 KB | None | 0 0
  1. /*
  2.     Task    : _example
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 02 January 2023 [21:16]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int r,c,id;
  11. };
  12. A a[110];
  13. int dp[110][110],cut[110][110];
  14. int recur(int l,int r){
  15.     if(l == r)      return 0;
  16.     if(dp[l][r])    return dp[l][r];
  17.     int now,mn = 1e9;
  18.     for(int k=l;k<r;k++){
  19.         now = recur(l,k) + recur(k+1,r) + (a[l].r * a[k].c * a[r].c);
  20.         if(now < mn){
  21.             mn = now;
  22.             cut[l][r] = k;
  23.         }
  24.     }
  25.     return dp[l][r] = mn;
  26. }
  27. void printOrder(int l,int r){
  28.     if(l == r){
  29.         cout << a[l].id;
  30.         return ;
  31.     }
  32.     cout << '(';
  33.     printOrder(l,cut[l][r]);
  34.     cout << " x ";
  35.     printOrder(cut[l][r]+1,r);
  36.     cout << ')';
  37. }
  38. int main(){
  39.     cin.tie(0)->sync_with_stdio(0);
  40.     cin.exceptions(cin.failbit);
  41.     int n;
  42.     cin >> n;
  43.     for(int i=1;i<=n;i++)
  44.         cin >> a[i].r >> a[i].c,a[i].id = i;
  45.     int ans = recur(1,n);
  46.     cout << ans << '\n';
  47.     printOrder(1,n);
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment