Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- By: facug91
- From: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=771&page=show_problem&problem=1832
- Name:
- Date: 12/02/2016
- */
- #include <bits/stdc++.h>
- #define EPS 1e-9
- #define MP make_pair
- #define F first
- #define S second
- #define endl "\n"
- #define DB(x) cerr << "#" << (#x) << ": " << (x) << " "
- #define DBL(x) cerr << "#" << (#x) << ": " << (x) << endl
- const double PI = 2.0*acos(0.0);
- #define INF 1000000000
- //#define MOD 1000000007ll
- //#define MAXN 10000100
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> ii; typedef pair<int, ii> iii;
- typedef vector<int> vi; typedef vector<ii> vii; typedef vector<iii> viii;
- int n, a[105], rsq[105];
- ii DP[105][105];
- ii dp (int l, int r) {
- if (DP[l][r].F != -1) return DP[l][r];
- if (l == r) return ii(0, a[l]);
- ii ans(0, 0), aux;
- for (int i=l+1; i<=r; i++) {
- aux = dp(i, r);
- aux.F += (rsq[i-1]-rsq[l-1]);
- if (ans.F < aux.F) ans = aux;
- aux = dp(l, i);
- aux.F += (rsq[r]-rsq[i]);
- if (ans.F < aux.F) ans = aux;
- }
- return DP[l][r] = ans;
- }
- int main () {
- #ifdef ONLINE_JUDGE
- ios_base::sync_with_stdio(0); cin.tie(0);
- #endif
- //cout<<fixed<<setprecision(4); cerr<<fixed<<setprecision(4); //cin.ignore(INT_MAX, ' '); //cout << setfill('0') << setw(5) << 25
- int tc = 1, i, j;
- while (cin>>n, n) {
- for (i=1; i<=n; i++) cin>>a[i];
- rsq[0] = 0;
- for (i=2; i<=n; i++) rsq[i] = a[i] + rsq[i-1];
- for (i=1; i<=n; i++) for (j=1; j<=n; j++) DP[i][j] = ii(-1, -1);
- cout<<dp(0, n-1).F<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement