Raslboyy

3717

Dec 15th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <algorithm>
  5. #include <string>
  6. #include <math.h>
  7. #include <climits>
  8.  
  9. //#include <chrono>
  10. //#include <fstream>
  11. //#include <bits/stdc++.h>
  12.  
  13. #define mp make_pair
  14. #define pb push_back
  15. #define eb emplace_back
  16. #define x first
  17. #define y second
  18. #define sz(x) (int)x.size()
  19. #define all(x) begin(x), end(x)
  20. #define rall(x) rbegin(x), rend(x)
  21. #define FOR(i,a,b) for (int i = (a); i < (b); i++)
  22. #define RFOR(i,b,a) for (int i = (b) - 1; i >= (a); i--)
  23.  
  24. using namespace std;
  25.  
  26. typedef unsigned long long ull;
  27. typedef long long ll;
  28. typedef long double ld;
  29. typedef pair<int, int> pi;
  30. typedef pair<ll, ll> pl;
  31. typedef vector<int> veci;
  32. typedef vector<bool> vecb;
  33. typedef vector<vector<int>> vvi;
  34. typedef vector<vector<bool>> vvb;
  35.  
  36. const int INF_I = 1e9;
  37. const ll INF_LL = 1e18;
  38.  
  39. int main() {
  40.     /*ifstream cin("in.txt");
  41.     ofstream cout("out.txt");
  42.     auto start_time = chrono::high_resolution_clock::now();*/
  43.  
  44.     ios::sync_with_stdio(false);
  45.     cin.tie(0);
  46.     cout.tie(0);
  47.  
  48.     int n;
  49.     cin >> n;
  50.     veci vec(n);
  51.     for (int i = 0; i < n; i++)
  52.         cin >> vec[i];
  53.     vvi dp(n, veci(n, INT_MAX));
  54.     for (int i = 0; i < n - 2; i++)
  55.         dp[i][i + 2] = vec[i + 1] * (vec[i] + vec[i + 2]);
  56.     for (int i = 0; i < n - 1; i++)
  57.         dp[i][i + 1] = 0;
  58.     for (int i = 0; i < n; i++)
  59.         dp[i][i] = 0;
  60.     for (int len = 3; len < n; len++)
  61.         for (int beg = 0; beg < n - len; beg++)        
  62.             for (int k = beg + 1; k < beg + len; k++)
  63.                 dp[beg][beg + len] = min(dp[beg][beg + len], dp[beg][k] + dp[k][beg + len] + vec[k] * (vec[beg] + vec[beg + len]));
  64.  
  65.     cout << dp[0][n - 1] << endl;
  66.    
  67.  
  68.    
  69.     /*auto end_time = chrono::high_resolution_clock::now();
  70.     chrono::duration<double> duration = end_time - start_time;
  71.     cout << duration.count() << "\n";
  72.     cin.close();
  73.     cout.close();*/
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment